问:for循环grep结果不解[急]

问:for循环grep结果不解[急]



[Copy to clipboard] [ - ]
CODE:
@a=qw(aa bb cc dd ee);
push @a,"ff";
@b=qw(aa bb cc dd ee);
push @b,"gg";
for(@b){
print grep /$_/,@a;
print "\n";
}

怎么结果是:
aabbccddeeff
aabbccddeeff
aabbccddeeff
aabbccddeeff
aabbccddeeff
aabbccddeeff
的?

不是
aa
bb
cc
dd
ee
的吗?

怎么有这样的差别的?

你的 grep 使用有问题,请看有关 grep 的文档。
请指点下?
我测试过,如果改为:
@a=qw(aa bb cc dd ee);
push @a,"ff";
@b=qw(aa bb cc dd ee);
push @b,"gg";
for $c(@b){
print grep /$c/,@a;
print "\n";
}
则能输出:
aa
bb
cc
dd
ee

难道使用$_与定义变量$c有区别的吗?

你第一个程序中的 $_ 和第二个程序中的 $c 是不一样的
第二个程序中的 $_ 是 @a 的元素而不是 @b 的元素


QUOTE:
原帖由 liang573728 于 2008-4-11 13:59 发表
请指点下?
我测试过,如果改为:
@a=qw(aa bb cc dd ee);
push @a,"ff";
@b=qw(aa bb cc dd ee);
push @b,"gg";
for $c(@b){
print grep /$c/,@a;
print "\n";
}
则能输出:
aa
bb
cc
dd
ee

...



[Copy to clipboard] [ - ]
CODE:
for(@b){
print grep /$_/,@a;
print "\n";
}

for循环默认循环变量是$_
同时grep { some_expression } @a
在{some_expression}中默认的变量也是$_
所以你程序中的$_其实是对于@a而言的


关键此处有两个$_,所以需要区分
哦,问题出在“$_”不能直接被引用,你可以使用一个中间变量。
Example:
***********************
@a=qw(aa bb cc dd ee);
push @a,"ff";
@b=qw(aa bb cc dd ee);
push @b,"gg";
for(@b){
        $c=$_;            #使用一个中间变量$c;
print  grep /$c/,@a ;
print "\n";
}
谢谢,churchmice 不死草 指点。
想明白了。