是否有一个系统变量来访问Perl中的最后一个子程序返回值?

Dan*_*ust 1 perl

Perl具有用于在给定上下文中一般访问变量的系统变量,例如,$1在正则表达式之后使用to来访问第一个分组项或$_在循环中访问当前值.

我很好奇是否存在来自子程序的返回值的类似系统变量.

恩.

my $var = (format($num)) ? $_ : 'N/A';
Run Code Online (Sandbox Code Playgroud)

如果定义$_了结果,format($num)那么系统变量将在哪里访问结果.

sim*_*que 6

不,那里没有.

但是,您可以重写示例以使用or ||defined-or //运算符.

my $foo = frobnicate() || 'N/A'; # only true values, so no 0, q{} or undef
my $bar = frobnicate() // 'N/A'; # no undef
Run Code Online (Sandbox Code Playgroud)

当然,这不会保持价值一段时间在代码中进一步使用它.

这也只有在sub的返回值只有一个值时才有效.如果返回了一个列表,它将使用列表中最右侧的值.

sub frobnicate { qw/a b 0/ }
my $var = frobnicate() || 'N/A';
say $var;
Run Code Online (Sandbox Code Playgroud)

以上将打印N/A.

sub frobnicate { qw/a b c/ }
my $var = frobnicate() || 'N/A';
say $var;
Run Code Online (Sandbox Code Playgroud)

虽然这会打印出来c.


为了拥有短代码,不要试图做空.大多数情况下,您想要的是易于阅读的代码.


请注意,这format是一个关键字.不要将它用作子例程标识符.