有没有办法可以根据数组中的值而不是数组中的两个新元素替换数组元素?

时间:2011-12-22 03:05:43

标签: arrays perl

我正在使用Perl进行编程,我遇到的情况是@contents=(A,S,D,F,M,E)这样的数组,我想用两个新元素M替换元素XY,例如@contents等于(A,S,D,F,X,Y,E)

2 个答案:

答案 0 :(得分:10)

您可以使用map

@contents = map { $_ eq 'M' ? ('X','Y') : $_ } @contents;

或者您可以使用splice

for (0 .. $#contents) {
    if ($contents[$_] eq 'M') {
        splice @contents, $_, 1, 'X', 'Y';
    }
}

如果您使用的是perl版本5.12及更高版本,还可以使用keys @contents作为索引列表进一步简化。

答案 1 :(得分:2)

您要查找的命令是splice

#!/usr/bin/perl -wT
use strict;

my @contents = qw(A S D F M E);
my $match    = 'M';
my @replace  = qw(X Y);
my $arrlen   = @contents;

for (my $i = 0; $i < $arrlen; $i++)
{
    if ($contents[$i] eq $match)
    {
        splice (@contents, $i, 1, @replace);
        last;
    }
}

print "$_\n" foreach (@contents);