0

我正在寻找一个执行替换的 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);

我希望第二个数组与第一个数组进行比较,挑选出 fox 和 dog 元素,将其替换为 rabbit 和 cat。

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

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

4

4 回答 4

7

我会做类似的事情:

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",
)
于 2013-09-13T12:31:21.247 回答
4
#!/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;
于 2013-09-13T12:33:08.007 回答
0

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

function replace (array, oldword, newword){
    var i = array.search(oldworld),
        a = array.substr(0, i),
        n = array.substr(oldword.length, array.length);
    return a + newword + b;
}

放在一个循环中应该可以工作。

(输出示例:)

console.log(replace('A quick brown fox jumps over the lazy dog', 'fox', 'rabbit'));

A quick brown rabbit jumps over the lazy dog
于 2013-09-13T12:31:52.020 回答
0

我自己很新,但这就是我想出的:

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";
于 2013-09-13T16:04:16.957 回答