我有以下代码:
#!/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];
问题是:为什么需要额外的括号?
我可能会误解这个案例的括号含义。
答案 0 :(得分:3)
语法错误是强制您消除表达式的歧义,可以将其解释为
split((/ /, $raw_text)[0])
或
(split(/ /, $raw_text))[0]
一般来说,Perl会做出最好的猜测"在模糊代码的意图,但在这种情况下,设计师决定没有真正的方法来决定"最有可能"解释,因此导致构造在编译中失败,迫使作者消除代码的歧义
请注意,内部括号是多余的,表达式可能是这样写的
(split / /, $raw_text)[0]