Thread Python rockz! (82 answers)
Opened by pktm at 2007-06-03 17:08

Strat
 2007-06-04 17:40
#23763 #23763
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=betterworld,03.06.2007, 18:13]Ich finde, man sollte dieses Konstrukt nicht ohne local $_ davor benutzen.[/quote]
Code (perl): (dl )
1
2
3
4
while( local $_ = <> ) {
  chomp;
  print if /xyz$/;
}

ist zwar knapp und sehr gut lesbar, aber wenn der block groesser wird, empfehle ich, eine benannte variable anstelle des $_ zu verwenden, z.B.:

Code (perl): (dl )
1
2
3
4
5
# ab perl5.6, bei aelteren ist noch ein defined hilfreich
while( my $line = <> ) {
    chomp $line;
    print if $line =~ /xyz/;
}

dann spart man sich das local, und hat sogar eine benannte variable. $_ verwende ich in produktionscode eher selten, und wenn, dann nur in sehr kurzen bloecken oder nachgestellten bedingungen (z.B. foreach), oder wo man es eigentlich verwenden muss (z.B. map, grep). Nebenbei kann die Verwendung von $_ bei mehreren Schleifenebenen eher verwirren (welches $_ ist denn jetzt gemeint?) als die Lesbarkeit erhoehen

Wenn man sehr viele REs auf eine variable anwenden muss und vermeiden will, die Variable unnoetig oft zu schreiben, dann kann man sich ja notfalls auch noch mit for(each) einen alias bauen , z.B.
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
while( my $line = <> ) {
    chomp $line;

    foreach ( $line ) {
        s/\s*$//;
        s/\#//g;
        ....
    } # foreach $line

} # while
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/

View full thread Python rockz!