@my_array = undef;
if (@my_array) {
print 'TRUE';
} else {
print 'FALSE';
}
Dies druckt TRUE
Warum hat @my_array = undef ein Element?
Warum das Array ein Element haben?
@my_array = undef;
if (@my_array) {
print 'TRUE';
} else {
print 'FALSE';
}
Dies druckt TRUE
Warum hat @my_array = undef ein Element?
Warum das Array ein Element haben?
Das Array hat ein Element, weil Sie ein Element zugewiesen haben. Betrachten Sie folgendes:
@array = undef; # Assigns the value 'undef' to @array
@array =(); # Assigns the empty list to @array
undef @array; # Undefines @array
Sie sehen ähnlich aus, aber die erste Zeile unterscheidet sich von den anderen beiden (die gleichwertig sind). Die erste Zeile führt zu einem Array mit einem einzelnen Element (der Wert undef
). Die anderen beiden ergeben ein leeres Array. In Perl ist undef
sowohl ein Wert als auch ein Operator. Die erste Zeile verwendet sie als Wert, die letzte Zeile verwendet sie als Operator.
In der Regel ist es nicht erforderlich, ein Array zu löschen. Sie leer sind, wenn erklärt:
my @array; # There's nothing in here, yet
In Perl ist undef
ein gültiger Wert. Sie können eine (oder eine beliebige Anzahl) von undef
s in ein Array oder eine Liste setzen.
Wenn Sie alle Elemente eines Arrays entfernen möchten, dies tun:
@my_array =();
Alternativ Sie tun können, "undef @my_array" –
oder $ # my_array = -1 ;. oder splice (@ my_array, 0, @ my_array) ;. – ysth
@Ysth: Ich bin neugierig: Warum nicht einfach @ my_array spleißen? Von perldoc -f splice: "Wenn OFFSET und LENGTH weggelassen werden, entfernt alles." – Telemachus
Siehe What is Truth? für mehr über Boolesche Werte in Perl. (Wenn Sie aus einer anderen Sprache anreisen, können Sie in ein paar andere Überraschungen sein, also ist es lesenswert.)
Hier ist ein Schlüsselbartes aus dem Artikel:
defined
undundef
gut sind für testen und skalieren. Versuchen Sie nicht sie mit Arrays, obwohl. Momentan gibtdefined(@array)
wahr zurück, wenn Perl Speicherplatz für das Array etwas zugewiesen hat, das seltsam und nicht nützlich für den durchschnittlichen Programmierer ist. Um ein Array in seinen Ausgangszustand zurückzukehren, sagen wir:@array =(); # good
zu sagen
@array = undef
ist zu machen@array
enthalten eine Ein-Elementliste, wobei der einzelnes Element der skalare Wert istundef
. Das ist kaum was wir wollen.
Noch ein Tipp: Lokalisieren Sie Ihre Variablen mit my
: my @array = (#whatever);
Nebenbemerkung: Für skalare Variablen sind $ p = undef und undef $ p äquivalent. – user55400