如何在Perl中进行参数赋值
使用以下命令调用perl脚本时:如何在Perl中进行参数赋值,perl,foreach,arguments,Perl,Foreach,Arguments,使用以下命令调用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
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!!";
}
}
正如您所看到的,这段代码并不完整。请。救命啊
是否有一种编写
if($\eq'text')
(是否if('text')
有效Perl?)的短方法?==
是数值比较运算符。使用eq
比较字符串(请参见手册中的)
获得字符串后,可以使用获取两个值的列表
您可能应该使用其中一个模块,而不是在
@ARGV
检查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
输出
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
呃,这些是对问题中的代码所做的一些重要编辑。为什么你现在使用
eq
而不是=
,而==
引起的问题似乎是问题的重点?(虽然现在没有那么简单,但是有没有一种写$=='text'的短方法?已经从问题文本中删除了)。同样,作业的左侧不再有变量,因此引入了额外的中断。@Quentin:当你让我意识到我的错误时,我更正了测试运算符。我从来没有左手边,因为我不知道写什么-如何从foreach
中获取下一个值?错误…“左侧=右侧”my2DArg\u x=
将中断。我不会从foreach获取下一个值,而是使用getopt。如果我想在选项上循环,我会使用数字索引。getopt
对于您来说并不过分。从头开始编写您自己的选项解析器非常困难。我支持getopt
建议。请看一个简短的介绍。好的,这很酷-我可以看出这是一条路要走。我只需要弄清楚如何使用默认值和通用语法使参数可选-但这是我在雨天的工作。