2009-06-17 5 views

Antwort

25

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 
+2

Nebenbemerkung: Für skalare Variablen sind $ p = undef und undef $ p äquivalent. – user55400

8

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 =(); 
+1

Alternativ Sie tun können, "undef @my_array" –

+0

oder $ # my_array = -1 ;. oder splice (@ my_array, 0, @ my_array) ;. – ysth

+0

@Ysth: Ich bin neugierig: Warum nicht einfach @ my_array spleißen? Von perldoc -f splice: "Wenn OFFSET und LENGTH weggelassen werden, entfernt alles." – Telemachus

11

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 und undef gut sind für testen und skalieren. Versuchen Sie nicht sie mit Arrays, obwohl. Momentan gibt defined(@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 ist undef. Das ist kaum was wir wollen.

Noch ein Tipp: Lokalisieren Sie Ihre Variablen mit my: my @array = (#whatever);

Verwandte Themen