Perl foreach und die änderung der Schleife variable

Schreibe ich ein script in Perl und habe eine Frage zu Perl foreach konstruieren.

Scheint es, dass, wenn Sie ändern die loop-Variablen ändert sich auf das eigentliche array. Ist dies in der Tat der Fall, oder habe ich etwas getan, vollständig falsch?

Will ich ändern, um eine Zeichenfolge wie abc.abc#a zu abc_abc_a (Unterstriche für nicht alpha-numerische Zeichen), aber ich brauche zum beibehalten des ursprünglichen Wertes in den array für die spätere Verwendung.

Ich habe code, der ungefähr so 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 konnte das problem lösen, indem Sie Folgendes tun:

@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 es ist ein effizienter Weg, dies zu erreichen?

Vielen Dank!

InformationsquelleAutor KLee1 | 2010-07-09
Schreibe einen Kommentar