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!!";
    }
}

ご覧のとおり、このコードは完全ではありません。Plz。ヘルプ。

書くための短い方法はありますか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

==数値比較演算子です。eq文字列を比較するために使用します(マニュアルの等式演算子を参照)。

文字列を取得したら、を使用splitして2つの値のリストを取得できます。

ループする代わりに、おそらくgetoptモジュール@ARGVの1つを使用する必要があります。

于 2012-09-02T15:54:47.097 に答える