perl字符串匹配问题

dream_and_life_szy 2009-04-13 11:13:23
//file1
aaa
bbb
ccc
ddd
//file2
aaabbbccc
aaabbbccc

比较file1中的每一行,只要和file2中的其中一行字符串部分匹配就不输出。
但是为什么bbb一直是输出的呢?下面是我的比较语句

open(FILE1,"<file1");
open(FILE2,"<file2");

$file1_line = <FILE1>;
$file2_line = <FILE2>;

if( $file2_line =~ /$file1_line/ )
...全文
832 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
hardword 2009-04-15
  • 打赏
  • 举报
回复
//file1.txt
aaa
bbb
ccc
ddd
//file2.txt
aaabbbccc
aaabbbccc

//find.pl
use strict;
use warnings;
open FILE1,"<file1.txt" or die "Not open file1.txt\n";
my $line_1;
my $line_2;
while($line_1 = <FILE1>)
{
chomp($line_1);
# print "$line_1\n";
open FILE2,"<file2.txt" or die "Not open file2.txt\n";
while($line_2 = <FILE2>)
{
chomp($line_2);
# print "$line_2\n";
if($line_2 =~ /$line_1/)
{

print "MatchResult:$line_1\n";
last;
}

}
}

close FILE1;
close FILE2;

//结果

E:\CSDN_tmp>perl find.pl
MatchResult:aaa
MatchResult:bbb
MatchResult:ccc
MatchResult:
fibbery 2009-04-14
  • 打赏
  • 举报
回复
to 4楼:
不是的,适用open打开的文件句柄FILE1并不是一个标量,所以,不需要使用$来标识;
而在我的代码中适用的是IO::File包,得到的是包的引用,故使用$f1来表示,实际上是IO::Handle包封装了文件句柄。
IO::File继承自IO::Handle和IO::Seekable。
liang_binglian 2009-04-14
  • 打赏
  • 举报
回复

$file1_line = <FILE1>;
$file2_line = <FILE2>;

是不是应该为
$file1_line = <$FILE1>;
$file2_line = <$FILE2>;
这样file_line和$file2_line才能读到数据
fibbery 2009-04-14
  • 打赏
  • 举报
回复
晕,C++写多了,上面的注释写错了,写成了C++单行注释了!
fibbery 2009-04-14
  • 打赏
  • 举报
回复
use strict;
use warnings;
use IO::File;
my $f1=new IO::File("< file1");//判断打开是否成功
my $f2=new IO::File("< file2");//判断打开是否成功
my ($ln1,$ln2);
my $finded=0;
while($ln1=<$f1>)
{
chomp($ln1);
$finded=0;
while($ln2=<$f2>)
{
chomp($ln2);
if($ln2=~/ln1/)
{
$finded=1;
last;
}
}
print("$ln1\n") if($finded==0);
$f2->seek(0,0);#回到文件头
}

没测试,你自己试一试
cyler123 2009-04-14
  • 打赏
  • 举报
回复
bbb为什么不输出啊?
相当于
aaabbbccc=~/bbb/
这当然是匹配的了

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧