0

次のコードがあります

my $use = "Use: " . basename($0) . " [options]";
my $version = "Version: 0.1 \n";
my $variableA;
my $variableB;

GetOptions(
'a=s'           => \$variableA,
'help'          => sub { print $use; exit 0 },
'version'       => sub { print $version; exit 0 },
'b'             => sub { \$variableB, &this_subroutine; goto NOWGOHERE; },
 );

die "Incorrect use. \n" unless (defined $variableA || defined $variableB);

sub this_subroutine {

     print "$variableB\n";

}

NOWGOHERE: print "HELLO I'M NOW HERE\n";

私がやろうとしているのは、設定してから実行することですが、$variableBどちらかまたは両方を使用して、両方ではなく、どちらか一方を実行することしかできません&this_subroutinegoto NOWGOHERE'b=s' => \$variableB,sub { &this_subroutine; goto NOWGOHERE;0 },

両方を実行しようとすると、 を印刷できないように見えますが$variableB、明らかな何かが欠けているか、構文的に間違っていますか?

使用'b=s' => \$variableB, sub { &this_subroutine; goto NOWGOHERE; },してもうまくいかないようですか?

あなたの助けは大歓迎です、どうもありがとう

4

1 に答える 1

5

$variableB割り当てないため、値を持つことはありません。

'a=s'           => \$variableA,

Getopt::Long にスカラー ref が与え$variableAられると、オプションの値がそのスカラーに割り当てられるため、値が与えられます。

一方で、

'b'             => sub { \$variableB, &this_subroutine; goto NOWGOHERE; },

オプション値を割り当てることができないコード参照を Getopt::Long に与えます。

ドキュメントに基づいて、オプション名とオプション値をパラメーターとしてコードリファレンスに渡すようです。

'b=s'             => sub { $variableB = $_[1]; this_subroutine(); goto NOWGOHERE; },

おそらくあなたが望むことをするべきです。

于 2013-03-22T11:12:14.787 に答える