如何有选择地访问Perl子例程返回的元素?

时间:2012-03-21 18:37:22

标签: arrays perl subroutine

假设一个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有没有办法做到这一点?

3 个答案:

答案 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)

Slices

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]