Perl Getopt :: Long赋值变量然后转到子例程

per*_*ser 0 perl getopt getopt-long

我有以下代码

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";
Run Code Online (Sandbox Code Playgroud)

我想要做的是设置$variableB,然后做&this_subroutine和,goto NOWGOHERE但我只能让它做一个或另一个,而不是两个,使用'b=s' => \$variableB,sub { &this_subroutine; goto NOWGOHERE;0 },

当我试图做两件事时,我似乎无法打印出来$variableB,是否有一些明显的我遗漏或在语法上做错了?

使用'b=s' => \$variableB, sub { &this_subroutine; goto NOWGOHERE; },似乎也不起作用?

非常感谢您的帮助,非常感谢

Dav*_*man 5

$variableB 永远不会有价值,因为你永远不会分配它.

'a=s'           => \$variableA,
Run Code Online (Sandbox Code Playgroud)

给出$variableA一个值,因为当给Getopt :: Long一个标量引用时,它会将该选项的值赋给该标量.

另一方面,

'b'             => sub { \$variableB, &this_subroutine; goto NOWGOHERE; },
Run Code Online (Sandbox Code Playgroud)

给Getopt :: Long一个代码引用,它不能将选项值赋给.

根据文档,它似乎将选项名称和选项值作为参数传递给coderef,在这种情况下

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

应该做你想做的事.