Regex perl:用另一个列表替换子字符串列表

Regex perl:用另一个列表替换子字符串列表,regex,perl,substitution,Regex,Perl,Substitution,我有一个第一个文件file1包含一个字符串所有汽车都是红色的。我想用另一个包含船蓝色的单词列表来替换初始字符串cars red中的单词列表(list1) All boats are blue. 这里的目标是通过一个更大的要替换的单词列表和一个更大的字符串来实现这一点,该字符串包含多个要替换的单词 我想代码应该是这样的: use strict; use warnings; open (my $list1, "<", "list1.txt") or die "cannot open list

我有一个第一个文件
file1
包含一个字符串
所有汽车都是红色的。
我想用另一个包含
船蓝色
的单词列表来替换初始字符串
cars red
中的单词列表(
list1

All boats are blue.
这里的目标是通过一个更大的要替换的单词列表和一个更大的字符串来实现这一点,该字符串包含多个要替换的单词

我想代码应该是这样的:

use strict;
use warnings;
open (my $list1, "<", "list1.txt") or die "cannot open list1\n";
open (my $list2, "<", "list2.txt") or die "cannot open list2\n";
open (my $file1, "<", "file1.txt") or die "cannot open file1\n";

my @replacer = <$list2>;
my @tobereplaced = <$list1>;

foreach my $word (@replacer) {
my $file1 =~ s/$tobereplaced/$word/gee; }
使用严格;
使用警告;
打开(my$list1,“
@tobereplace=map split,@tobereplace;
@replacer=地图分割,@replacer;
我的替换百分比;
@替换{@tobereplace}=@replacer;
我的$pat=加入“|”,映射quotemeta,@tobereplace;
我的$re=qr/$pat/;
而(){
s/\b($re)\b/$replacements{$1}/g;
印刷品;
}

您没有指定输入文件的格式,所以我不得不做一些猜测。

修复。因此习惯于先查看要搜索的内容。您不需要实际读取文件吗?类似于
while(){s/\b($pat)\b/$replacements{$1}/g;print;}
它现在返回这个“GLOB”(0x6000701d8)“您将
$file1
视为该文件的内容,因此我也这样做了。但它是一个文件句柄,因此我相应地调整了我的设置。”。
@tobereplaced = map split, @tobereplaced;
@replacer     = map split, @replacer;

my %replacements;
@replacements{@tobereplaced} = @replacer;

my $pat = join '|', map quotemeta, @tobereplaced;
my $re = qr/$pat/;

while (<$file1>) {
   s/\b($re)\b/$replacements{$1}/g;
   print;
}