2010-02-11 57 views
1

我的test.pl腳本如下。如何在命令行上將值傳遞給Perl子例程參數?

#!C:\Perl\bin\perl.exe 
use strict; 
use warnings; 


sub printargs 
{ 
    print "@_\n"; 
} 

&printargs("hello", "world"); # Example prints "hello world" 

如果我用print($a, $b);代替printargs("hello", "world");

如何通過 '你好', '世界' 到$ A,$ B,當我在命令行中運行perl的test.pl世界你好,謝謝。

+3

您應該明智地省略'&&從'&printargs(...)'。你不需要它,並且使用'&'前綴子調用可能會產生你可能不期待的副作用。 – 2010-02-11 09:09:36

回答

3

$ ARGV [0]包含第一個參數,$ ARGV [1]包含第二個參數,等等

$#ARGV是@ARGV陣列的最後一個元素的下標,所以數量在命令行上的參數是$#ARGV + 1.

+3

您也可以使用@ARGV來獲取元素的數量。 例如:if(@ARGV <2){die「Usage:」。 $ 0。 「 \ n」; } – user198470 2010-02-11 12:01:23

1

您想訪問Perl中的「命令行參數」。

基本上,Perl會將實際腳本名稱後面傳遞的字符串看作名爲@ARGV的數組。

這裏是一個簡短的教程:http://devdaily.com/perl/edu/qanda/plqa00001.shtml

不僅僅是谷歌「perl的命令行參數」爲多。

3

命令行參數位於@ARGV數組中。只是傳遞給你的函數:

&print(@ARGV); 

可能是最好的避免像print一個名字 - 可能會混淆名稱相同的內置功能。

+1

謝謝。修改*打印*到* printargs * – 2010-02-11 08:18:59

0

基本上,正如其他人所說,@ARGV列表是您的問題的答案。

現在如果你想走得更遠,併爲您的程序的命令行選項,你也應該有getargs.

0

這將從命令行參數中打印出「hello world」,同時按要求將數據傳遞給$ a和$ b。

#!/usr/bin/perl -w 

use warnings; 
use strict; 

sub printargs($$) 
{ 
    print $_[0] . " " . $_[1] . "\n"; 
} 

my($a,$b) = ($ARGV[0],$ARGV[1]); 
printargs($a,$b); 
相關問題