Ich schreibe ein Skript in Perl und habe eine Frage zu Perls foreach
Konstrukt.Perls Foreach und Ändern der Looping-Variable
Es scheint, dass wenn Sie eine der Loop-Variablen ändern, es im tatsächlichen Array ändert. Ist das tatsächlich der Fall, oder habe ich etwas getan komplett falsch?
Ich möchte eine Zeichenfolge wie abc.abc#a
zu abc_abc_a
(Unterstreichungen für nicht alphanumerische Zeichen) ändern, aber ich muss den ursprünglichen Wert im Array für die spätere Verwendung beibehalten.
Ich habe Code, der etwa wie folgt aussieht:
@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.
}
ich das Problem, indem Sie folgendermaßen vorgehen lösen könnte:
@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...
}
aber ist es eine effizientere Art und Weise dies zu erreichen?
Vielen Dank!