linux运行perl脚本,linux运行perl脚本_将Perl脚本从Solaris移植到Linux
linux運行perl腳本
隨著可視化技術的進步,企業正在將物理服務器整合到虛擬化環境中,從而在減少功耗和物理空間的同時改善資產管理。 在某些情況下,整合運動涉及從舊操作系統遷移到可以提供更輕松的系統維護或其他總擁有成本收益的操作系統。
如果您打算從Solaris遷移到Linux,則幾乎所有的自定義代碼(包括C,shell腳本,Perl等)都需要某種補救措施 ,即映射屬性的“重新對齊”,這是由于平臺的差異而引起的。 。
沒有時間閱讀這篇文章?
這是將Perl腳本從Solaris遷移到Linux時要注意的五個最常見的“陷阱”:
平臺特定的Perl模塊依賴性? 操作系統命令和IPC(進程間通信)? 利用操作系統路徑名? 包含平臺特定信息的特殊變量? 跨平臺實現不同或未實現的功能
而且,Perl與其他語言沒有什么不同-盡管程序本身可以在平臺之間移植,并且您只需要安裝一個解釋器即可在目標系統上運行代碼-可能會出現一些補救類型的問題。 特定于Solaris的資源,尤其是操作系統路徑名,系統命令和Perl模塊,通常會在代碼中得到利用。 因此,您應該期望必須進行一些代碼補救,以確保Perl腳本在遷移后能夠按預期工作。
但是,什么Perl語法構造以及您最應注意哪些運算符? 在本文中,我們解釋了最常見的可移植性陷阱,并提出了將Perl腳本從Solaris遷移到Linux的路線圖。 您可能會使用本文中關于從大多數UNIX操作系統(包括AIX,HP / UX等)遷移到Linux的路線圖; 但是,所有示例,示例代碼和參考都集中于從Solaris到Linux的遷移。
Perl可移植性問題
您應該檢查Perl腳本上引用的資源,以確保在Linux系統上運行Solaris特定代碼時不會出現問題。 例如,考慮一個腳本,該腳本從僅在Solaris上遇到的文件中提取信息。 想象執行一個使用Linux上沒有的標志的系統命令。
根據可訪問性或參考性,大多數可移植性問題可分為五類,如表1所示。
表1. Perl腳本中的可移植性問題的類別
類? 可移植性問題? 01? 平臺特定的Perl模塊依賴性? 02? 操作系統命令和IPC(進程間通信)? 03? 利用操作系統路徑名? 04? 使用包含平臺特定信息的特殊變量? 05? 跨平臺實現不同或未實現的功能
表1中列出的類并不是所有可移植性問題的權威列表,而只是最常見的問題。 有關可移植性問題的更多詳細信息,請查看Perl編程文檔(請參閱參考資料中的鏈接)。
完善Perl移植的五個步驟
讓我們看一下將Perl腳本從Solaris移植到Linux的路線圖。 此路線圖建立在表1中的可移植性問題類別的基礎上。該路線圖包括五個步驟,每個步驟著眼于表1中的類別之一; 每個步驟都會確定Perl語法構造或運算符可能需要某種代碼補救的問題。
步驟1.檢查特定于Solaris的模塊依賴性
第一步就是檢查導入的Perl模塊。 其中一些是專門為Solaris構建的,啟用它們后,它們會將腳本綁定到Solaris平臺。 我們需要通過腳本代碼來識別這些模塊,找出它們所利用的功能和變量,并進行適當的更改,以使它們不會將您束縛在未運行Perl腳本的平臺上。
您可以在CPAN信息庫中找到特定于Solaris的模塊的完整列表 。 它們的名稱通常以Solaris ::或Sun :: Solaris ::開頭。
您可以使用清單1中的shell腳本,該腳本可用于使用以“ Solaris”或“ Sun”開頭的導入語句來標識Perl腳本文件。
清單1.如何查找Solaris模塊導入
#!/bin/bash
find . -name "*.pl" -exec grep -ilP "^\s*use (Solaris|Sun)" {} \;
您可以修改清單1中的代碼,以使該腳本在Perl腳本中查找特定于Solaris的模塊時更加準確。 例如,您可以將清單1中的shell腳本轉換為Perl,從而利用PPI模塊進行解析。 該模塊的使用超出了本文的范圍,但是我們建議在解析Perl代碼時使用它以提高準確性。
在使用Solaris特定代碼標識腳本之后,您需要搜索在Linux上也可以使用的等效模塊。 從功能上識別此類模塊并不總是那么容易,因為原始模塊可能會處理Solaris平臺專有的技術。 發生這種情況時,您將必須執行更深入的分析。
要使用等效的基于Linux的模塊,您需要用新模塊的等效項替換所有import語句以及所有被調用的函數和變量 。
步驟2.檢查對Solaris特定系統命令的調用
當執行Solaris到Linux的遷移時,從Perl腳本中調用操作系統命令可能會出現最常見的問題:
目標系統上缺少命令? 具有不同標志集的命令? 在兩個平臺上行為不同的命令
因此,在處理此問題(類號02可移植性問題:系統調用)時,您需要格外小心。
此處的目標是確保在語法上和語義上在腳本上引發的任何系統命令在Linux上也能正常工作。 簡而言之,這就是識別帶有Solaris特定系統命令的腳本中所利用的Perl核心功能和運算符。
讓我們從一個例子開始。 清單2顯示了一個簡單的Perl腳本,用于顯示Solaris系統的內存大小。
清單2.顯示系統內存大小的Perl腳本
#!/usr/bin/perl
my $mem_info = `prtconf | grep Memory`;
my (undef, $mem_size) = split(':', $mem_info);
($mem_size, undef) = split(' ', $mem_size);
print "Memory size is: ".$mem_size."\n";
現在,假設我們要在Linux上運行相同的腳本。 我們發現它通過backtick運算符調用了管道系統命令( prtconf | grep Memory ),而prtconf命令特定于Solaris。 第一步是找到它的替代品。
您可以使用cat /proc/meminfo | grep MemTotal cat /proc/meminfo | grep MemTotal即使輸出格式不同,因為/proc/meminfo保留大小信息以KB為單位,而prtconf以MB為單位。
要修復此腳本,可以將ptrconf cat /proc/meminfo替換為ptrconf ,但是將輸出信息保留為MB(我們不知道此腳本的輸出是否用作其他腳本的輸入,因此,不要更改它至關重要它),我們可以使用簡單的轉換。 清單3顯示了如何修復此腳本的示例。
清單3.修復清單2腳本
#!/usr/bin/perl
my $mem_info = `cat /proc/meminfo | grep MemTotal`;
my (undef, $mem_size) = split(':', $mem_info);
($mem_size, undef) = split(' ', $mem_size);
$mem_size = int($mem_size / 1000);
print "Memory size is: ".$mem_size."\n";
由于Perl具有足夠的靈活性以適應執行操作系統命令的不同方式,因此有許多不同的核心功能和運算符用于該目的。 表2列出了可用于從Perl腳本中調用系統命令的Perl核心功能和運算符。
表2.用來調用系統命令的核心功能和運算符
功能/操作員? Solaris中的示例? Linux中的示例? 反引號( `` )? `prstat`? `ps -e`? 系統? system("psrinfo")? system("cat","/proc/cpuinfo")? 執行? exec("/usr/sbin/df -kZ")? exec("/bin/df -kZ")? x? qx/"metastat"/? qx/"lvdisplay"/? 打開? open DATA, "cat /var/cron/log |"? Open DATA, "cat /var/log/cron"? 閱讀管? readpipe( "cat /etc/default/login " )? Readpipe( "cat /etc/default/login" )
您可以檢查Perl文檔以獲取有關這些功能和運算符以及不屬于Perl核心語言的任何其他功能的進一步信息。 請查閱IBM紅皮書“從Solaris到Linux的遷移:系統管理員指南 ”,以了解有關系統管理命令差異的更多信息。
步驟3.檢查OS路徑名的使用
現在讓我們討論通過Perl腳本遷移杠桿路徑名。 此步驟類似于步驟2。在這里,您需要注意用于打開或操作文件的語法元素和運算符。 盡管有特定的運算符可以執行此操作,但是引用路徑名可能會出現一些問題。 (調用第2步中提到的系統命令時,也可以看到此信息。)
清單4顯示了一個小的腳本,該腳本讀取Solaris的NFS服務器配置文件并將其打印到標準輸出。
清單4.將系統文件的內容打印到標準輸出的Perl腳本
#!/usr/bin/perl
open(NFSCONF, '/etc/default/nfs');
print ;
close(NFSCONF);
從Solaris遷移到Linux時,您需要注意通常不同的系統路徑。 在此示例中,此Solaris腳本上引用的文件/etc/default/nfs在Linux / Red Hat發行版中不存在,但是可以用/etc/sysconfig/nfs替換。 清單5顯示了在腳本被修復后的腳本。
清單5.清單4的修復
#!/usr/bin/perl
open(NFSCONF, '/etc/sysconfig/nfs');
print ;
close(NFSCONF);
您需要了解任何操縱文件的Perl命令。 表3顯示了Perl中使用的一些常見路徑處理命令。 如果腳本中正在使用其中任何一個,則在遷移時需要修正路徑名。
表3. Perl中的常見路徑處理命令
命令? 描述? chdir? 更改工作目錄。? chmod? 更改文件列表的權限。? glob? 返回文件名擴展的列表(可能為空)。? link? 創建鏈接到舊文件名的新文件名。? mkdir? 創建一個新目錄。? open? 打開一個文件。? opendir? 打開目錄。? rename? 更改文件名。? rmdir? 刪除指定目錄。? sysopen? 打開指定的文件,并將其與指定的文件句柄關聯。
步驟4.檢查包含Solaris特定信息的特殊變量的使用
一些特殊變量保存有關Solaris特定環境的信息。 您需要識別這些變量并進行正確的翻譯。 表4列出了一些可能包含Solaris特定信息或參考的核心變量。
表4.一些Perl核心變量; 在Perl編程文檔中查看所有內容
變量? 描述? ENV? 包含當前環境變量。 其中一些變量可能不支持Solaris和Linux之間的直接映射。 一些示例是變量NETPATH,MSGVERB和SEV_LEVEL。? SIG? 包含信號的信號處理程序。 請參閱相關主題有關這兩個平臺上的信號差異的詳細信息部分。
步驟5.識別在跨平臺上實現不同的功能的使用
一些Perl核心功能未實現或在各種平臺上實現方式有所不同。 這些功能在Solaris和Linux上的行為會有所不同。 您將需要對其進行更改,以便他們合作或找到Linux平臺的互補版本并鎖定到該版本中。 再次,請參見《 Perl編程文檔》( 有關鏈接,請參見參考資料)。
結論
確定從Solaris遷移到Linux(或從HP / UX或AIX遷移到Linux)時可能引起麻煩的Perl腳本的五個最常見組件并不難。 但是,進行必要的代碼修復和代碼替換以成功將腳本引入Linux可能會很耗時,尤其是在您要遷移許多腳本的情況下。 本文中有關代碼補救的建議和示例應該可以幫助您入門。 祝好運!
翻譯自: https://www.ibm.com/developerworks/opensource/library/l-port-perl/index.html
linux運行perl腳本
總結
以上是生活随笔為你收集整理的linux运行perl脚本,linux运行perl脚本_将Perl脚本从Solaris移植到Linux的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [html] 如何去除标签<i>默认斜
- 下一篇: illustrator下载_平面设计:1