Arrays Perl用数组替换搜索后的文本

Arrays Perl用数组替换搜索后的文本,arrays,perl,substitution,Arrays,Perl,Substitution,我正在寻找一个可以进行替换的perl程序,但是我的循环每次都不起作用。例如,这一概念是: #!/usr/bin/perl use warnings; use strict; my @array1 = qw(A quick brown fox jumps over the lazy dog); my @array2 = qw(fox dog); my @array3 = qw(rabbit cat); 我想让第二个数组与第一个数组进行比较,找出狐狸和狗的元素,用兔子和猫替换它 所以这句话应该变

我正在寻找一个可以进行替换的perl程序,但是我的循环每次都不起作用。例如,这一概念是:

#!/usr/bin/perl
use warnings;
use strict;

my @array1 = qw(A quick brown fox jumps over the lazy dog);
my @array2 = qw(fox dog);
my @array3 = qw(rabbit cat);
我想让第二个数组与第一个数组进行比较,找出狐狸和狗的元素,用兔子和猫替换它

所以这句话应该变成“一只敏捷的棕色兔子跳过了懒猫”

这是一个概念,但数据是不同的,第二个和第三个数组可能每个包含50个元素。任何帮助都将不胜感激。

我会做以下事情:

use strict;
use warnings;
use Data::Dump qw(dump);

my @array1 = qw(A quick brown fox jumps over the lazy dog);
my @array2 = qw(fox dog);
my @array3 = qw(rabbit cat);
my %corresp;
@corresp{@array2} = @array3;

foreach my $word(@array1) {
    $word = $corresp{$word} if exists $corresp{$word};
}
dump@array1;
输出:

(
  "A",
  "quick",
  "brown",
  "rabbit",
  "jumps",
  "over",
  "the",
  "lazy",
  "cat",
)

我不懂perl,但我认为类似:(受javascript影响)

放入一个循环应该会起作用

(输出示例:)


我自己也是个新手,但我想到的是:

use strict;
use warnings;

my @array1 = qw(A quick brown fox jumps over the lazy dog);
my @array2 = qw(fox dog);
my @array3 = qw(rabbit cat);

my $index = 0;

foreach (@array1) {
$index++ if s/$array2[$index]/$array3[$index]/;
}

print join(' ',@array1), "\n";

请显示您尝试过的代码,并解释它在做什么或不做什么。您不应该使用
@array2
@array3
而是应该使用单个哈希:
我的%map=(“狐狸”=>“兔子”,“狗”=>“猫”,…)
同样,
$\u1=$h{$\u}| |$\ u1代表@array1@TLP
@corresp{map fc,@array2}=@array3
@mpapec是的,不管怎样,使用散列是唯一可行的选择。如果array2中的单词的顺序与array1中的单词的顺序不同,这将不起作用(即:尝试将array1更改为
qw(一只棕色的小狗跳过懒狐狸);
我明白你的意思。回到绘图板上。
console.log(replace('A quick brown fox jumps over the lazy dog', 'fox', 'rabbit'));

A quick brown rabbit jumps over the lazy dog
#!/usr/bin/perl
use warnings;
use strict;

my @array1 = qw(A quick brown fox jumps over the lazy dog);
my @array2 = qw(fox dog);
my @array3 = qw(rabbit cat);

my %h;
@h{@array2} = @array3;

@array1 = map { $h{$_} || $_ } @array1;
use strict;
use warnings;

my @array1 = qw(A quick brown fox jumps over the lazy dog);
my @array2 = qw(fox dog);
my @array3 = qw(rabbit cat);

my $index = 0;

foreach (@array1) {
$index++ if s/$array2[$index]/$array3[$index]/;
}

print join(' ',@array1), "\n";