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