使用:
调用perl脚本时 myPerlScript --myarg 10 --my2Darg 42x87
。
如何进行作业:
$myarg = 10;
$my2Darg_x = 42;
$my2Darg_y = 87;
当且仅当myarg
和my2Darg
是有效参数时?
我想我需要这样的事情:
#!/usr/bin/perl
foreach (@ARGV) {
if ($_ eq '--myarg') {
$myarg =
}
elsif ($_ eq '--my2Darg') {
$my2Darg_x =
$my2Darg_y =
}
else {
print "Not valid argument!!";
}
}
如您所见,此代码不完整。 PLZ。帮助
是否有一种简短的方式来编写if($_ eq 'text')
(if('text')
有效的Perl?)?
答案 0 :(得分:4)
检查Getopt::Long
模块,它位于核心位置。
<强>脚本强>
use strict;
use Getopt::Long;
my ($arg, $arg_2d);
# prepare format cmd string
GetOptions( "myarg=i" => \$arg, "my2Darg=s" => \$arg_2d);
unless ( $arg && $arg_2d && $arg_2d =~ m{\d+x\d+}i ) {
print "Usage: $0 --myarg 10 --my2Darg 42x87 \n";
exit 1;
}
my ($arg_2d_x, $arg_2d_y) = split 'x', $arg_2d;
printf "arg: %s \narg_2d_x: %s \narg_2d_y: %s\n", $arg, $arg_2d_x, $arg_2d_y;
<强>输出强>
arg: 10
arg_2d_x: 42
arg_2d_y: 87
答案 1 :(得分:3)
==
是数值比较运算符。使用eq
比较字符串(请参阅手册中的equality operators)。
获得字符串后,您可以使用split
获取这两个值的列表。
您应该使用其中一个getopt modules而不是循环@ARGV
。