Answers:
取决于您要做什么。如果要将这两个参数用作输入文件,则可以将它们传递进来,然后使用<>
来读取它们的内容。
如果它们具有不同的含义,则可以使用GetOpt::Std
和GetOpt::Long
对其进行轻松处理。GetOpt::Std
仅支持单字符开关,并且GetOpt::Long
更加灵活。来自GetOpt::Long
:
use Getopt::Long;
my $data = "file.dat";
my $length = 24;
my $verbose;
$result = GetOptions ("length=i" => \$length, # numeric
"file=s" => \$data, # string
"verbose" => \$verbose); # flag
另外,@ARGV
是一个特殊变量,包含所有命令行参数。$ARGV[0]
是第一个(即"string1"
您的情况),$ARGV[1]
是第二个参数。您不需要访问特殊的模块@ARGV
。
Contains the name of the current file when reading from <> .
您可以按照自己的想法传递它们,并在脚本中从array中获取它们@ARGV
。像这样:
my $numArgs = $#ARGV + 1;
print "thanks, you gave me $numArgs command-line arguments.\n";
foreach my $argnum (0 .. $#ARGV) {
print "$ARGV[$argnum]\n";
}
从这里。
$#ARGV + 1
您可能也曾说过@ARGV
ARGV[0]
或者$argv[1]
如果您正在寻找特定的参数。
foreach my $arg (@ARGV) {
print $arg, "\n";
}
将打印每个参数。
另外,更性感的方式...
my ($src, $dest) = @ARGV;
“假定”传递两个值。额外的代码可以验证该假设是安全的。
@ARGV
所有参数,所有参数都可以通过使用而获得
如果参数是要读取的文件名,请使用菱形(<>)运算符获取其内容:
while (my $line = <>) {
process_line($line);
}
如果参数是选项/开关,请使用slavy13.myopenid.com已经显示的GetOpt :: Std或GetOpt :: Long。
如果它们是别的东西,可以通过显式遍历@ARGV或使用以下shift
命令来访问它们:
while (my $arg = shift) {
print "Found argument $arg\n";
}
(请注意,shift
仅当您不在all sub
s内时sub
,此操作才起作用。在内,它将检索传递给的参数列表,sub
而不是传递给程序的参数列表。)
如果只需要一些值,则可以使用@ARGV数组。但是,如果您正在寻找更强大的功能来执行某些命令行选项处理,则应使用Getopt :: Long。
./script.pl
否则运行时将会发生很多问题。