如何在命令行上将值传递给Perl子例程参数?

问题描述:

我的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

$ ARGV [0]包含第一个参数,$ ARGV [1]包含第二个参数,等等

$#ARGV是@ARGV阵列的最后一个元素的下标,所以数量在命令行上的参数是$#ARGV + 1.

+3

您也可以使用@ARGV来获取元素的数量。 例如:if(@ARGV \ n”; } – user198470 2010-02-11 12:01:23

您想访问Perl中的“命令行参数”。

基本上,Perl会将实际脚本名称后面传递的字符串看作名为@ARGV的数组。

这里是一个简短的教程:http://devdaily.com/perl/edu/qanda/plqa00001.shtml

不仅仅是谷歌“perl的命令行参数”为多。

命令行参数位于@ARGV数组中。只是传递给你的函数:

&print(@ARGV); 

可能是最好的避免像print一个名字 - 可能会混淆名称相同的内置功能。

+1

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

基本上,正如其他人所说,@ARGV列表是您的问题的答案。

现在如果你想走得更远,并为您的程序的命令行选项,你也应该有getargs.

一个100g的待办事项了解@ARGVperldoc perlvar

这将从命令行参数中打印出“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);