CPAN: lösche zeichen mit "tr" und schreibe in neue Variable

Beitrag lesen

alte Variable "@$_[0]"

@$_[0] ist keine Variable, sondern der Slice @{$_}[0] und ist in diesem Fallbeispiel ein Programmierfalle. Es besteht die Möglichkeit, sich später damit Schwierigkeiten einzuhandeln, falls der Index mehrere Werte umfasst und der Slice einen Listenausdruck zurückliefert. Die Operatoren tr und s funktionieren nämlich nicht mit Listen, sondern nur Skalaren, Lvalues etc. (siehe perlop).

Die bessere Schreibweise $_->[0] ist immer ein Skalarwert. So wird ein Schuh draus:

  
    use 5.013002;  
    $_       = ['foo!"$123', 'bar%&/$456', 'baz()=789'];  
    my $wert = $_->[0] =~ tr/a-zA-Z0-9//cdr;  
    say $wert; # foo123