Я пишу сценарий на Perl и у меня есть вопрос о конструкции foreach
в Perl.
Похоже, что если вы измените одну из переменных цикла, она изменится в фактическом массиве. Это на самом деле так, или я что-то сделал полностью неправильно?
Я хочу изменить строку вроде 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...
}
но есть ли более эффективный способ сделать это?
Большое спасибо!