Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Perl中进行参数赋值_Perl_Foreach_Arguments - Fatal编程技术网

如何在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

使用以下命令调用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!!";
    }
}
正如您所看到的,这段代码并不完整。请。救命啊


是否有一种编写
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
建议。请看一个简短的介绍。好的,这很酷-我可以看出这是一条路要走。我只需要弄清楚如何使用默认值和通用语法使参数可选-但这是我在雨天的工作。