直接索引到Perl中的返回数组

Car*_*arl 16 perl

这个问题已经在这里这里被问过PHP ,我对Perl也有同样的问题.给定一个返回列表的函数,有没有办法(或者什么是最好的方法)在不使用临时变量的情况下立即索引它?

例如:

my $comma_separated = "a,b,c";
my $a = split (/,/, $comma_separated)[0]; #not valid syntax
Run Code Online (Sandbox Code Playgroud)

我明白为什么第二行中的语法无效,所以我想知道是否有一种方法可以获得相同的效果,而无需先将返回值分配给列表并从中进行索引.

Sea*_*ean 26

只需使用括号来定义列表,然后将其编入索引以拉出所需的元素:

my $a = (split /,/, $comma_separated)[0];
Run Code Online (Sandbox Code Playgroud)

  • 因为在很多情况下,括号在函数cals上是可选的,我通常会把它写成`my $ x =(split /,/ => $ str)[0]` (7认同)

Sch*_*ern 8

就像你可以这样做:

($a, $b, $c) = @array;
Run Code Online (Sandbox Code Playgroud)

你可以这样做:

my($a) = split /,/, $comma_separated;
Run Code Online (Sandbox Code Playgroud)

my $a在LHS(左侧)被视为标量上下文. my($a)是列表上下文.它是一个单独的元素列表,因此它只获得从中返回的第一个元素split.

它具有自动限制分割的额外好处,因此如果$comma_separated很大则没有浪费的工作.

  • Perl已经自动执行此优化.从"perldoc -f split":"当分配给列表时,如果省略LIMIT,或者为零,Perl提供的LIMIT大于列表中变量的数量,以避免不必要的工作." (4认同)