【发布时间】:2011-09-20 19:07:29
【问题描述】:
我有以下方法,它接受一个变量,然后显示来自数据库的信息:
sub showResult {
if (@_ == 2) {
my @results = dbGetResults($_[0]);
if (@results) {
foreach (@results) {
print "$count - $_[1] (ID: $_[0])\n";
}
} else {
print "\n\nNo results found";
}
}
}
一切正常,除了 foreach 循环中的打印行。这个 $_ 变量仍然包含传递给方法的值。
无论如何“强制”$_ 上的新值范围,还是它总是包含原始值?
如果有任何好的教程可以解释 $_ 的范围是如何工作的,那也很酷!
谢谢
【问题讨论】:
-
一般经验法则是除非绝对必要,否则永远不要使用默认标量。与
foreach (@results)相比,foreach my $result (@results)的代码可维护性/可读性要好得多。仅仅因为 Perl 在输入字符与可读性的权衡方面非常宽容,并不意味着你不应该总是在可读性方面犯错。总是像下一个维护你的代码的开发者是一个知道你住在哪里的狂暴的精神病一样编码:) -
其实这个问题与
$_的范围无关,是对Perl命名约定的误解。
标签: perl default perlvar perlsyn