请教perl的grep的奇怪现象

请教perl的grep的奇怪现象

file1内容:
adsl2601600
la9985918
la9002081
la9002085

file2内容:
adsl2601600 | | 124.128.40.1 | | 3076 |
la9083876 | | 124.128.40.35 | | 3020 |
la9533584 | | 124.128.40.11 | | 3171 |
la9408535 | | 124.128.40.1 | | 2804 |
la9924089 | | 124.128.40.19 | | 3142 |
la9985918 | | 124.128.40.35 | | 2709 |

编写了一个程序,目的是以file1的内容为关键字,从file2中提取出包含file1内容的行,预想结果文件result.txt应该为:

adsl2601600 | | 124.128.40.1 | | 3076 |
  la9985918 | | 124.128.40.35 | | 2709 |

程序1.pl如下:
#!/usr/local/bin/perl
open(EP,"</home/net/n2000client/jn/liusijia/file1");
while(<EP>)
{
$name=$_;
print "$name";
system("/usr/bin/grep -i $name /home/net/n2000client/jn/liusijia/file2");
sleep(1);

}
close(EP);
#

程序执行后,就显示为:
# 1.pl  
adsl2601600
然后就一直停着。

这个现象挺奇怪,好像在grep时出现异常,但是我单独用grep的命令,带着-i参数,是可以的,请问:问题出现在哪里啊?
谢谢指教!!
$name=$_;

改为  chomp ( $name=$_);

是这个原因吗,解决了没,楼主?
既然用perl写, 这个功能完全可以用perl 实现, 为什么要调system
chomp($name=$_);

还有,file1中最后一行不能为空,即
adsl2601600
la9985918
la9002081
la9002085
而不是
adsl2601600
la9985918
la9002081
la9002085
(null)

试过了,通过了。
通过了,非常感谢。
chomp和chop不一样吗?我曾经用
chop($_);
$name=$_;

可是这样写的话,$_原来的变量将被丢失,变成空了,

谢谢!

此外,如果用perl写,而不是调用system,该如何写呢?

谢谢!
用perl写很简单啊,只是语句多些。。。



system("/usr/bin/grep -i $name /home/net/n2000client/jn/liusijia/file2");

换成

open FILE2,"/home/net/n2000client/jn/liusijia/file2";
while(<FILE2>) {
        print $_ if(/$name/i);
}
close FILE2;

就ok了吧

而且perl里自带grep这个命令,跟linux下的grep命令同名,所以也可以这样写(未测试)
open FILE2,"/home/net/n2000client/jn/liusijia/file2";
foreach(grep /$name/i <FILE2>){print $_;}


QUOTE:
原帖由 zljjg2000 于 2008-7-8 11:30 发表
chomp和chop不一样吗?我曾经用
chop($_);
$name=$_;

可是这样写的话,$_原来的变量将被丢失,变成空了,

谢谢!

chop 是截掉最后一个字符,而chomp是截掉'\n'