我有一个perl脚本,例如:
#!/usr/bin/perl -w
use strict;
my @vars = split(" ", "aaa bbb");
my @list = split(" ", "aaa");
foreach(@vars) {
if ( grep(/$_/, @list)) {
print "1\t";
}else{
print "0\t";
}
}
我希望它能给出"1 0"作为回报,但总是"1 1".有谁知道为什么?我使用的是perl 5.8.8.
谢谢.
春
因为你滥用$_变量.
在grep EXPR, LIST构造的表达式中,$_别名为列表的元素并计算表达式.$_直到grep语句结束才会恢复之前的值.
由于裸体/.../表达式相当于$_ =~ /.../,您的grep陈述就是
grep $_ =~ /$_/, @list
Run Code Online (Sandbox Code Playgroud)
用$_别名的元件@list,并且其是用于最正常值真$_.
我们的教训是$_不要为你做太多的工作.说
foreach $var (@vars) {
if ( grep(/$var/, @list)) {
print "1\t";
}else{
print "0\t";
}
}
Run Code Online (Sandbox Code Playgroud)
代替.任何六个月后查看您的代码的人(包括您未来的自己)都会感谢您.