我正在尝试解决以下问题。
我有 2 个文件。地址.txt 和文件.txt。我想使用 perl 脚本将所有 A/B/C/D (File.txt) 替换为相应的字符串值(从 Address.txt 文件中读取)。它没有在我的输出文件中替换。我得到相同的 File.txt 内容。我尝试了以下代码。
这是 Address.txt 文件
A,APPLE
B,BAL
C,CAT
D,DOG
E,ELEPHANT
F,FROG
G,GOD
H,HORCE
这是文件.txt
A B C
X Y X
M N O
D E F
F G H
这是我的代码:
use strict;
use warnings;
open (MYFILE, 'Address.txt');
foreach (<MYFILE>){
chomp;
my @data_new = split/,/sm;
open INPUTFILE, "<", $ARGV[0] or die $!;
open OUT, '>ariout.txt' or die $!;
my $src = $data_new[0];
my $des = $data_new[1];
while (<INPUTFILE>) {
# print "In while :$src \t$des\n";
$_ =~ s/$src/$des/g;
print OUT $_;
}
close INPUTFILE;
close OUT;
# /usr/bin/perl -p -i -e "s/A/APPLE/g" ARGV[0];
}
close (MYFILE);
如果我写$_ =~ s/A/Apple/g;
然后输出文件很好,A 替换为“Apple”。但是当动态到来时,它不会被替换。
提前致谢。我是 perl 脚本语言的新手。如果我在哪里错了,请纠正我。
更新 1:我更新了下面的代码。现在工作正常。我的问题是这个算法的大问题。代码 :
#!/usr/bin/perl
use warnings;
use strict;
open( my $out_fh, ">", "output.txt" ) || die "Can't open the output file for writing: $!";
open( my $address_fh, "<", "Address.txt" ) || die "Can't open the address file: $!";
my %lookup = map { chomp; split( /,/, $_, 2 ) } <$address_fh>;
open( my $file_fh, "<", "File1.txt" ) || die "Can't open the file.txt file: $!";
while (<$file_fh>) {
my @line = split;
for my $char ( @line ) {
( exists $lookup{$char} ) ? print $out_fh " $lookup{$char} " : print $out_fh " $char ";
}
print $out_fh "\n";
}