我最近了解了
Perl’s default variable
$_
.关于主题的一篇好文章在这里
http://perlmaven.com/the-default-variable-of-perl.我发现能够将函数应用到它而不指定令人着迷的参数.还有其他类似设施的编程语言吗?
编辑:
评论中列出的一些语言是:
Powershell – 应该与Perl非常相似.
Groovy – 具有泛型iterator变量.
Scala – 将_变量作为通用lambda参数.
Lisp – 具有照应宏.
HyperTalk和AppleScript – 请参阅@AmbroseChapel answer
解决方法
我建议而不是寻找一个“默认”变量,而是根据隐式变量来考虑它.那些更为常见.
如果你看一下例如,在awk sed grep等等 – 他们将魔法应用于’当前行’.
例如.
sed -e 's/fish/paste/g' myfile
将隐式迭代myfile,并在每行应用一次模式.
我认为这是perl中出现的 – 因为perl让你模仿sed:
perl -p -e 's/fish/paste/g' myfile
如果你解析了这个,你把它变成:
LINE: while ( defined ( $_ = <ARGV> ) ) { s/fish/paste/g; } continue { die "-p destination: $!\n" unless print $!; }
Perl只是更多……明确它的隐含性.我的意思是,一旦你开始在while循环中’设置’一个隐式变量,那么从那里开始在for循环中这样做是有意义的.
我会敦促谨慎 – 我喜欢$_但我不喜欢写它 – 我觉得如果我真的是,那么我通常会更好地命名一个变量.
与编程一样 – 尤其是perl – 可读性和清晰度是最重要的.
我认为能够写作;
my $regex = qr/some_pattern/; while ( <STDIN> ) { print if m/$regex/; }
更清楚:
while ( my $line = <STDIN> ) { if ( $line =~ m/some_pattern/ ) { print $line; } }