我有以下代码
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_subroutine
和goto NOWGOHERE
,但我只能使用其中一个,而不是两个, 'b=s' => \$variableB,
或sub { &this_subroutine; goto NOWGOHERE;0 },
当试图同时做这两件事我似乎无法打印$variableB
时,是否有一些明显我遗漏或在语法上做错的事情?
使用'b=s' => \$variableB, sub { &this_subroutine; goto NOWGOHERE; },
似乎也不起作用?
非常感谢您的帮助,非常感谢
答案 0 :(得分:5)
$variableB
永远不会有值,因为您从未分配过它。
'a=s' => \$variableA,
给$variableA
一个值,因为当给Getopt :: Long一个标量引用时,它会将该选项的值赋给该标量。
另一方面,
'b' => sub { \$variableB, &this_subroutine; goto NOWGOHERE; },
给Getopt :: Long一个代码引用,它不能将选项值赋给。
根据文档,它似乎将选项名称和选项值作为参数传递给coderef,在这种情况下
'b=s' => sub { $variableB = $_[1]; this_subroutine(); goto NOWGOHERE; },
应该做你想做的事。