+ -
当前位置:首页 → 问答吧 → 一个perl问题

一个perl问题

时间:2011-07-06

来源:互联网

#!/usr/bin/perl -w
use strict;
our $WORK_PATH = $ARGV[0];

#my $dir = "d:\\test\\";

open(FILE_A,"$WORK_PATH/A.txt") || die;
my @in_a=<FILE_A>;
close(FILE_A);

open(FILE_B,"$WORK_PATH/B.txt") || die;
my @in_b=<FILE_B>;
close(FILE_b);

open my $out , ">$WORK_PATH/C.txt" or die;

foreach my $tmpb (@in_b)
{
chomp($tmpb);
our $tmpb1 = substr($tmpb,rindex($tmpb,':')+1);
print "$tmpb1","\n";
our $tmpb2 = substr($tmpb,0,rindex($tmpb,':'));
print "$tmpb2","\n";

foreach (@in_a)
{
         chomp;
         print "$tmpb2\n";
     print "$tmpb1\n";
     my $temp =~ s/$tmpb2/$tmpb1/;
         print "$temp\n";
         print $out "$temp\n";
}
last;
}

A文件:
10.1.1.1 xxxxxxxx
10.1.1.2 xxxxxxxx
10.1.1.3 zzzzzzzz
10.1.1.4 xxxxxxxx
10.1.1.5 xxxxxxxx
10.1.1.6 xxxxxxxx
10.1.1.7 yyyyyyyy
10.1.1.8 xxxxxxxx
10.1.1.9 yyyyyyyy
10.1.1.10 yyyyyyy

B:
xxxxxxxx:你欠水费
yyyyyyyy:你欠电费
zzzzzzzz:你欠气费

现在要把xxxxxxxx yyyyyyyy  zzzzzzzz 替换成响应的文字。 s/$tmpb2/$tmpb1/ 怎么不起效?

作者: zjm6533637   发布时间: 2011-07-06

把这几行:
my $temp =~ s/$tmpb2/$tmpb1/;
print "$temp\n";
print $out "$temp\n";

改成:
s/$tmpb2/$tmpb1/;
print "$_\n";
print $out "$_\n";

但是,你的程序有逻辑问题,这个请LZ自己解决。

另外,类似的问题应该用HASH解决,而不是匹配。

作者: iamlimeng   发布时间: 2011-07-06

把这几行:
my $temp =~ s/$tmpb2/$tmpb1/;
print "$temp\n";
print $out "$temp\n";

改成:
s/$tmpb2/$tmpb1/;
print "$_\n";
print $out "$_\n";

但是,你的程序有逻辑问题,这个请LZ自己解决。

另外,类似的问题应该用HASH解决,而不是匹配。

作者: iamlimeng   发布时间: 2011-07-06

LZ应该希望写下面的代码:
  1. #!/usr/bin/perl

  2. use strict;
  3. #our $WORK_PATH = $ARGV[0];

  4. my $WORK_PATH = "d:/t";

  5. open(FILE_A,"$WORK_PATH/A.txt") || die;
  6. my @in_a=<FILE_A>;
  7. close(FILE_A);

  8. open(FILE_B,"$WORK_PATH/B.txt") || die;
  9. my @in_b=<FILE_B>;
  10. close(FILE_b);

  11. my %hash;
  12. foreach (@in_b) {
  13.          chomp;
  14.          my ($key,$value) = split /:/;
  15.          $hash{$key} = $value;
  16. }

  17. open my $out , ">$WORK_PATH/C.txt" or die;
  18. foreach (@in_a) {
  19.         chomp;
  20.         my ($ip,$key) = split /\s+/;
  21.         print "$ip $hash{$key}\n";
  22.         print $out "$ip $hash{$key}\n";
  23. }
  24. close $out;
复制代码

作者: iamlimeng   发布时间: 2011-07-06