【发布时间】:2018-07-28 23:35:15
【问题描述】:
我有误解,在 Perl 中使用大括号和引用。 我已经构建了一个基本函数来检查数组是否包含值。
示例 1:
sub array_contains
{
my ($arr_ref, $search, $strict) = @_;
if ($strict) {
return (grep {$_ eq $search} @$arr_ref);
} else {
return grep {index($_, $search) != -1} @$arr_ref;
}
}
后来,我想让它看起来更简洁。
示例 2:
sub array_contains
{
return (!$_[2] ?
(grep {$_ eq $_[1]} @{$_[0]}) :
(grep {index($_, $_[1]) != -1} @{$_[0]})
);
}
然后,我花了一些时间才意识到由于某种原因我不能使用@$_[0],就像在第一个示例中一样,必须使用@{$_[0]}。
Perl 专家能否解释一下,为什么它必须在第二个示例中 @{$_[0]} 而不能是 @$_[0],就像在第一个示例中一样,我使用了 @987654327 @。是否必须将@_ 分配给本地范围的变量?
【问题讨论】:
-
你的“更简洁”的版本也更难读。对你的代码这样做没有任何好处,所以不要这样做。
-
@Borodin,谢谢。今后我会牢记这一点。