假设一个Perl子例程返回一个数组:
sub arrayoutput
{
...some code...
return @somearray;
}
我想从这里只访问一个特定的数组元素,比如第一个。所以我能做到:
@temparray=arrayoutput(argument);
然后参考$temparray[0]
。
但是这种简短的引用不起作用:$arrayoutput(some argument)[0]
。
我已经习惯了Python和Perl的新手,所以我仍然在寻找一些简短,直观,类似python的方法(a=arrayoutput(some argument)[0]
)来获取这个值。我的Perl程序变得越来越长,使用像这样的临时数组似乎很难看。 Perl有没有办法做到这一点?
答案 0 :(得分:15)
仅通过列表上下文拉出第一个参数:
my ( $wanted ) = array_returning_sub( @args );
带片的TIMTOWTDI:
my $wanted = ( array_returning_sub( @args ) )[0];
两种样式都可以扩展为提取返回数组的第n个元素,尽管列表切片在眼睛上更容易:
my ( undef, undef, $wanted, undef, $needed ) = array_returning_sub( @args );
my ( $wanted, $needed ) = ( array_returning_sub( @args ) )[2,4];
答案 1 :(得分:10)
use warnings;
use strict;
sub foo {
return 'a' .. 'z'
}
my $y = (foo())[3];
print "$y\n";
__END__
d
更新:解决您的评论的另一个代码示例。您不需要中间变量:
use warnings;
use strict;
sub foo {
return 'a' .. 'z'
}
print( (foo())[7], "\n" );
if ( (foo())[7] eq 'h') {
print "I got an h\n";
}
__END__
h
I got an h
答案 2 :(得分:2)
一种方法可能是[(arrayoutput(some argument))]->[0]
。