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

时间:2018-05-08 13:37:34

标签: perl

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

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

离。

my $var = (format($num)) ? $_ : 'N/A';

其中$_是系统变量,用于访问format($num)的结果(如果已定义)。

1 个答案:

答案 0 :(得分: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

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

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

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

以上内容将打印N/A

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

虽然这会打印c

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

请注意format is a keyword。不要将它用作子程序标识符。