Was bedeutet $#array bedeuten in Perl?
Ich Suche im folgenden code-snippet:
my @ret = <someMethod>
return (undef) if( $DB_ERROR );
return (undef) unless ($#ret >= 0);
Tut $#
nur geben Sie eine Anzahl der Elemente in einem array?
InformationsquelleAutor der Frage jcee14 | 2008-10-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
$#arrayname
gibt dir den index des letzten Elements, also wenn das array@ret
hat 2 Elemente, dann$#ret
1 ist.Und, wie bereits von Barry Brown, ein leeres array liefert -1.
Um die Länge können Sie das array im skalaren Kontext:
InformationsquelleAutor der Antwort Ed Guiness
edg ist richtig, aber der ursprüngliche code ist unnötig stumpf. In den meisten Fällen
$#foo
ist eine rote fahne, die den code geschrieben werden kann, einfach mitscalar @foo
.unless foo >= bar
schwer herausfinden. Erste, schalten Sie ihn in eine positive Aussage.Wann wird $#ret < 0? Wenn es -1 ist. A $#ret -1 ist ein array mit der Länge 0. Also, die oben geschrieben werden kann viel mehr als einfach...
Aber man kann nicht eine negative Länge-array, also...
Und == ist im skalaren Kontext, so dass ein "Skalar" ist überflüssig...
Aber das ist nur eine wortreiche Art zu sagen: "wenn
@ret
ist falsch".Denen ich denke, für einfache Aussage Modifikatoren ist besser ausgedrückt, es sei denn,.
Ist das nicht leichter zu Folgen?
Als Letzte Randbemerkung,
return undef
wird abgeraten, weil es die falsche Sache in der Listen-Kontext. Erhalten Sie eine Liste mit einem element undef, was wahr ist. Stattdessen nutzen Sie einfach eine leere zurück, das gibt undef zurück, im skalaren Kontext und eine leere Liste im Listen-Kontext.InformationsquelleAutor der Antwort Schwern
Bewusst sein, dass die $#array-Ausdruck wird -1 zurück, wenn array hat keine Elemente.
InformationsquelleAutor der Antwort Quantum Omega
Zusammenzufassen jeder andere auch, der code ist viel besser lesbar, wenn wie folgt geschrieben:
InformationsquelleAutor der Antwort Rob Van Dam