Perl:从方法返回的数组索引

时间:2018-04-19 09:34:23

标签: arrays perl methods indexing

我有以下代码:

#!/usr/bin/perl

use strict;
use feature qw(say);

my $raw_text = "a b c d e f g h";

my @array = split(/ /, $raw_text);
my $element = @array[0];

say "Element [0] of array is : ", $array[0];

这打印在STDOUT:

Element [0] of array is : a

到目前为止,这么好。但是,如果我想从split方法直接检索元素,我会想到:

my $element = split(/ /, $raw_text)[0];

但事实证明这会引发编译错误。做一些研究我发现我必须输入:

my $element = ( split(/ /, $raw_text) )[0];

问题是:为什么需要额外的括号?

我可能会误解这个案例的括号含义。

1 个答案:

答案 0 :(得分:3)

语法错误是强制您消除表达式的歧义,可以将其解释为

split((/ /, $raw_text)[0])

(split(/ /, $raw_text))[0]

一般来说,Perl会做出最好的猜测"在模糊代码的意图,但在这种情况下,设计师决定没有真正的方法来决定"最有可能"解释,因此导致构造在编译中失败,迫使作者消除代码的歧义

请注意,内部括号是多余的,表达式可能是这样写的

(split / /, $raw_text)[0]
相关问题