[精讚] [會員登入]
9549

[PERL] 命令列傳入參數 argv

Perl 的外部傳參,是$ARGV[0]、$ARGV[1]、$ARGV[2].....

分享此文連結 //n.sfs.tw/10675

分享連結 [PERL] 命令列傳入參數 argv@新精讚
(文章歡迎轉載,務必尊重版權註明連結來源)
2023-10-24 15:46:30 最後編修
2017-01-24 09:22:45 By 張○○
 

自動目錄

Perl 的外部傳參

PERL若在命令列中有代入參數的話,可以直接用陣列@ARGV來取用,這裡的ARGV都得大寫

例如 t.pl

#!/usr/bin/perl -w

print "@ARGV";
print "\n". $ARGV[1];   #第2個傳參

執行

# ./t.pl 0 1 2 3 4
0 1 2 3 4
1

個別參數分別是$ARGV[0]、$ARGV[1]、$ARGV[2].....

判斷傳參是否存在的方法

如果該參數不存在,會出現這樣的錯誤:

Use of uninitialized value ...

所以取用前得先判斷該參數是否存在

if(  !$ARGV[0] )  {die  "請輸入第一個參數\r\n";}

#請注意'!' 因為,ARGV[0]並非undef,而是無初始值。
所以寫成下面這樣都是錯的:

if(  undef ($ARGV[0] ) ){...}  X
if( $ARGV[0]  eq ""  ){...} X
if( $ARGV[0]  == ""  ){...} X
if( $ARGV[0]  == undef  ){...} X

只有這樣是正確的
if(  !$ARGV[0] )  { ... } O

和PHP有點不一樣的在於要取得執行程式本身(含你指定的路徑),只要使用特殊變數 $0 即可:一個錢號和數字0,以上例而言:

print $0;  #./t.pl

 

參數帶有中文字的處理方式

當參數帶有中文字,到了系統中會變成亂碼:

# ./t.pl -n "這裡是精讚部落"
-n 這是一串中文字       <==中文字會變亂碼

t.pl為上面的範例程式,其中傳入兩個參數 "-n" 及"這裡是精讚部落"。中文字顯示部分會變亂碼

 

原本這是很棘手的問題,但只要用 decode來處理即可:

use Encode;
print "@ARGV";
print decode("utf8",$ARGV[1]);

結果

-n 這裡是精讚部落

 

 


編修原文 2009-10-21 13:39:42

END

你可能感興趣的文章

[PERL] 05-運算子 #1 PERL的運算子介紹,總共有21種

Perl 的列舉寫法(map list) 使用列舉的寫法來設定陣列,非常的強大

[PERL] 23-多執行緒 而多執行緒的程式,可在一次執行程式時間,同時進行多線程的計算,在效率上可獲得即大的提升。

Perl 計算經過的時間 Perl 計算程式執行經過的時間

自行撰寫syslog server建立資訊安全控管中心#4 -- 過濾條件設定 利用PERL將syslog收攏到資料庫的程式,過濾條件設定

[PERL] 08-陣列 #2 --操作 更多perl陣列的操作,如拆開、黏合、取出、加入等等

我有話要說

>>

限制:留言最高字數1000字。 限制:未登入訪客,每則留言間隔需超過10分鐘,每日最多5則留言。

訪客留言

[無留言]

隨機好文

UTF-8 BOM (Byte Order Mark) 的問題 在 Michael Kaplan 那看到 Every character has a story #4: U+feff

[札記] 2016.7~12月札記 札記,只是札記

TFTP Server 安裝及使用 讓設備的網路設定檔或是韌體經由TFTP拷備出來,操作的方法

外匯課程經驗 有天遇到某個朋友的正妹朋友,說她有個很棒的外匯投資課程,要我們去聽,只收場地費200大洋。她又說續效最差一個月也有1%,誰還在苦哈哈上班?

只會買到爛貨的政府採購法 政府採購的公開招標,常常就只能比價格不能比品牌,只能比價格不能比品質,只能比價格不能比口碑,只能比價格不能比信用...