平台無關的Perl應用

2021-05-22 17:12:10 字數 1708 閱讀 1476

最近由於專案需求,需要把再windows平台上執行的

perl程式移植到linux平台上。由於是第一次做類似的事情,結果折騰了很久,實在是無比痛苦啊。那種看著程式無法執行的感受真的是。。。。憋屈!

先說一下背景吧。原來實在windows上利用perl對staf進行包裝,做為整個automation框架中的一部分,主要用來負責控制機和sut之間的遠端通訊,控制等。現在需要把這套環境移植到linux上。由於linux的perl環境和windows有所不同,所以一直後肯定不能直接使用。需要做相應的調整。在這裡我不想多說如何調整的,這在不同的環境中多少有所差異,我想說的其實是如何編寫平台、安裝路徑無關的perl程式,盡可能減少平台移植的開銷。

該專案是用perl來呼叫staf的函式完成遠端控制等功能。所以這裡涉及到幾個和環境相關的因素。

1:perl自身的執行環境

這點一般來說是不需要做什麼改動。因為linux系統一般都會自帶perl,環境變數中會把它的執行路徑包括在內。但是如果你希望用自己的perl程式而不是系統自帶的,那麼需要指定特定的perl執行路徑。

2:staf的lib庫路徑資訊

該程式利用perl來呼叫staf的介面,所以一定要將staf相關的pm檔案,庫檔案的路徑資訊指定。其中perl程式中需要呼叫staf的pm檔案時,可以利用

begin 將路徑資訊包含在內。

對於staf相關的類庫資訊,可以通過設定perllib或者perl5lib環境變數完成。

3:staf的類庫需要呼叫的其他類庫資訊

比如,libplstaf.so需要呼叫libstaf.so等其他類庫檔案。但是這些類庫檔案不在系統的預設類庫路徑下。一種方法是把這些檔案拷貝導系統預設路徑下,如/usr/lib等。另一種方法是在/etc/ld.so.conf檔案中加入「ld_library_path=路徑」這類的語句,但是這種方法需要修改到系統檔案。改動最小的方法是在執行程式前,修改ld_library_path,並且用export命令將其匯出。這樣在執行perl程式的時候,就會把ld_library_path中新增的路徑作為庫檔案搜尋路徑。

下面以實際專案為例,我建立了乙個test.sh的檔案,在這個shell指令碼的前面,設定和當前系統對應的環境變數,然後才執行相應的perl程式,這樣就做到了盡可能的平台無關。如果需要移植到另乙個環境中,只要把整個開發包、指令碼等拷貝到另乙個平台上,然後修改相應的test.sh中的環境變數即可。

#!/bin/sh

path=/usr/local/staf/bin:$path

export path

ld_library_path=/usr/local/staf/lib

export ld_library_path

perllib=/usr/local/staf/lib:/usr/local/staf/bin/:/usr/local/staf/lib/perl58/

export perllib

classpath=/usr/local/staf/lib/jstaf.jar:/usr/local/staf/samples/demo/stafdemo.jar

export classpath

stafconvdir=/usr/local/staf/codepage

export stafconvdir

perl /usr/local/staf/bin/test.pl

這裡只是很簡單的多平台應用的乙個例子,我相信會有其他很多更複雜的應用啦。不過針對本身就是跨平台的指令碼類程式,這種方法應該是比較常用和方便的。

平台無關的RICHTEXT實現

簡述 本文講述了乙個簡單的平台無關的richtext的實現方法。這個richtext特性如下 平台無關 文字大小獲取。文字的繪製。我們把它封裝到乙個字型的純虛介面類中去 class ifont 對於自定義的元素,也是乙個純虛的介面類 class irichtextcustomelement publ...

perl的arm平台移植

1.本人使用的是perl 5.22.0.tar.gz 2.解壓後到根目錄,執行configure 一直回車到最後,然後make編譯,儲存generate uudmap可執行檔案,後邊要用到 4.解壓補丁包,到perl的原始碼根目錄,替換相同檔案,同時修改cross目錄下的config檔案,依據自己的...

Perl中ftp的應用

連線ftp有兩種連線模式,預設模式和passive模式。ftp伺服器工作在預設模式下,連線比較簡單 use net ftp initial ftp my ftp net ftp new ftpserver,debug 0,timeout 60 or return 1 ftp login ftpuse...