Я пишу script в Perl и задаю вопрос о конструкции Perl foreach
.
Похоже, что если вы меняете одну из переменных цикла, она изменяется в фактическом массиве. Это действительно так, или я сделал что-то полностью неправильно?
Я хочу изменить строку как abc.abc#a
на abc_abc_a
(подчеркивание для не-буквенно-цифровых символов), но мне нужно сохранить исходное значение в массиве для последующего использования.
У меня есть код, который выглядит примерно так:
@strings = ('abc.abc#a', 'def.g.h#i');
foreach my $str (@strings){
$str =~ s/[^0-9A-Za-z]/_/g;
print $str, "\n"; #Actually I use the string to manipulate files.
}
Я мог бы решить проблему, выполнив следующие действия:
@strings = ('abc.abc#a', 'def.g.h#i');
foreach my $str (@strings){
my $temp = $str; #copy to a temporary value
$temp =~ s/[^0-9A-Za-z]/_/g;
print $temp, "\n"; #$str remains untouched...
}
но есть ли более эффективный способ выполнить это?
Большое спасибо!