0

当使用以下命令调用 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!!";
    }
}

如您所见,此代码不完整。请。帮助。

有没有一种简短的写法if($_ eq 'text')(是if('text')有效的 Perl 吗?)?

4

2 回答 2

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
于 2012-09-02T16:17:22.313 回答
3

== is the numerical comparison operator. Use eq to compare strings (see equality operators in the manual).

Once you have the string, you can use split to get a list of the two values.

You should probably use one of the getopt modules instead of looping over @ARGV.

于 2012-09-02T15:54:47.097 回答