Thread Hash als Option missbrauchen (118 answers)
Opened by bloonix at 2005-12-19 02:24

Dubu
 2005-12-23 10:44
#61044 #61044
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Gute Kommentare, Steffen.

[quote=steffenw,21.12.2005, 20:26]
Code: (dl )
1
2
3
4
$stats->{'ProcStats'}->{'ProcUser'}
...
my %file = (
  'passwd'     => '/etc/passwd', # den key meine ich hier

ist für mich übertrieben gequotet. {} quotet schon Hashkeys, man muß also nicht erst mit '...' die Evaluierung anwerfen.
[/quote]
Und das "fat comma" (=>) quotet auch den Ausdruck links von sich, sofern er die Form eines Identifiers hat, also kann man auch das 'passwd' ohne Anfuehrungszeichen schreiben. (Die Einschraenkung mit dem Identifier gilt uebrigens auch fuer das Quoten innerhalb von {}.)

Es ist aber zugegebenermassen Uebungssache, bis man im Gefuehl hat, was man da quoten muss und was nicht. In der Praxis kann man sehr viele Anfuehrungszeichen weglassen, weil Hashkeys sehr oft nur aus Buchstaben bestehen.

Quote
Code: (dl )
print ' ' x 2 . "$key" . ' ' x (30-length($key)) . "$value\n";

print erwartet nicht einen Scalar, es erwartet Listen. Du kannst also print die einelnen Elemente durch Komma getrennt hinwerfen und mußt sie nicht erst vorher zusammenverketten. Wie das print dann optimiert, ... ist print's Sache.

In diesem Fall waere aber ein printf sowieso deutlich einfacher und uebersichtlicher:
Code: (dl )
printf "  %-30s %s\n", $key, $value;


Quote
Code: (dl )
return undef;

Das ist doppelt. return; ohne Argument ist richtig und undef; auch, weil es der zuletzt evaluierte Wert ist und somit sowieso zurückgegeben wird. Beides zusammen bremst nur.

Vorsicht, da besteht ein Unterschied zwischen return undef und return. Beides ist zwar gleichwertig, wenn die Funktion im skalaren Kontext aufgerufen wird, aber im Listenkontext liefert die erste Variante ein (skalares) undef, die zweite aber eine leere Liste zurueck.

Ein print meinesub() z.B. gaebe (unter use warnings) eine Warnung aus, wenn meinesub() mit return undef endet, mit einem einfachen return kaeme gar nichts.

Es kommt also darauf an, welches Verhalten erwuenscht ist.

View full thread Hash als Option missbrauchen