如何在Perl中进行参数赋值

时间:2012-09-02 15:48:57

标签: perl foreach arguments

使用:

调用perl脚本时

myPerlScript --myarg 10 --my2Darg 42x87

如何进行作业:

$myarg = 10;
$my2Darg_x = 42;
$my2Darg_y = 87;

当且仅当myargmy2Darg是有效参数时?

我想我需要这样的事情:

#!/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?)?

2 个答案:

答案 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