Я программирую на Perl, и я нахожусь в ситуации, когда у меня есть массив, например @contents=(A,S,D,F,M,E), и я хочу заменить элемент M на два новых элемента X и Y, например как @contents будет равно (A,S,D,F,X,Y,E).
@contents=(A,S,D,F,M,E)
M
X
Y
@contents
(A,S,D,F,X,Y,E)
Вы можете использовать map.
map
@contents = map { $_ eq 'M' ? ('X','Y') : $_ } @contents;
Или вы можете использовать splice:
splice
for (0 .. $#contents) { if ($contents[$_] eq 'M') { splice @contents, $_, 1, 'X', 'Y'; } }
Вы также можете упростить дальнейшее упрощение, используя keys @contents в качестве списка индексов, если вы используете Perl версии 5.12 и выше.
keys @contents
Команда, которую вы ищете: 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);