在perl脚本中使用grep

use*_*231 1 perl

我有一个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.

谢谢.

mob*_*mob 7

因为你滥用$_变量.

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)

代替.任何六个月后查看您的代码的人(包括您未来的自己)都会感谢您.