Thread wie testen ob leeres Array definiert wurde? (36 answers)
Opened by KurtZ at 2008-03-06 23:58

KurtZ
 2008-03-08 17:31
#106831 #106831
User since
2007-12-13
411 Artikel
BenutzerIn
[default_avatar]
Gast+2008-03-08 05:55:58--
Code: (dl )
my @array; #undefiniertes array

Code: (dl )
1
2
my @array; #undefiniertes array
@array = (); #jetzt ein leeres array

Habe ich das so richtig verstanden? Wenn ja, wozu moechtest du da noch testen koennen ob es undefiniert ist oder keine Elemente enthaelt?
Leer ist doch leer, oder?


leider nicht ganz, weil Perl wie gesagt auch noch für ein leeres Array keinen Speicher anlegt, aber mit
Code: (dl )
1
2
my @array; #undefiniertes array
( @array = ('dummy') )=(); #jetzt ein leeres definiertes array


kannst du den Unterschied mit defined abfragen.

Obige Schreibweise könnte ich auch noch akzeptieren, aber mich mit den ständigen Warnings das defined @arr deprecated ist, hätte ich schwierigkeiten.

das ist unorthogonal, wozu gibts ein undef @arr wenns kein defined @arr geben darf (deprecated)?


Gast+2008-03-08 06:30:37--
Code (perl): (dl )
@liste=lade_liste('Test.txt');


glaube nicht dass das so klappt, @liste bleibt ja auch undefined wenn das Return eine leere Liste ist.

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
use strict;
use Data::Dumper;

my @arr;

sub undef_arr {
        my @arr;
        return @arr;
}

sub empty_arr {
        my @arr=("");
        @arr=();
        return @arr;
}

@arr=undef_arr();

print "defined" if (defined @arr); #: nicht defined
print Dumper \@arr;

@arr=empty_arr();

print "defined" if (defined @arr); #: nicht defined
print Dumper \@arr      



pq hat schon recht dass du in Perl eh meistens auf Refs ausweichen musst !!!

pq+2008-03-08 13:20:45--
ach ich weiss nicht, wieso nimmst du da nicht gleich referenzen. ein u.U. langes array
durch die gegend zu kopieren ist eh nicht das beste, was man machen kann.


da geb ich dir (leider) voll recht, ich bin sogar soweit zu glauben mann solle grundsätzlich mit Arr_refs und Hash_refs arbeiten und den Editor so konfigurieren dass er defaultmäßig ein @ sofort zu @$ expandiert.


pq+2008-03-08 13:20:45--

also: natürlich sehe ich in dem beispiel einen unterschied, aber das sieht für mich echt
konstruiert aus. ich habe sowas in 10 jahren perl noch nie gebraucht - das heisst zwar nicht
zwangsläufig, dass es auch niemand anderes braucht, aber ich geb ja hier nur meine meinung wieder.


Hmm ... es gibt ein englisches Zitat das ich leider nicht mehr googeln kann, da heißt es emacs und perl-experten haben eine große Gemeinsamkeit, wenn sie sich erstmal mühsam eingearbeitet haben, dann geht ihnen das Verständnis für Anfängerprobleme flöten.

IMHO birgt jede Unorthogonalität den Samen zu unendlichem Ärger.

Die organische Wachstumsgeschichte von Perl bringt auch viele Vorteile, wie z.B.
das riesige CPAN, das will ich hier auch nicht abstreiten. Mein Anliegen ist mir
ein stylistisches "rechtwinkliges Koordinatensystem" für dieses Gebäudesystem zurechtzulegen, sodass ich schnell durch die vielen angebauten inhomogenen Räume navigieren kann ohne mir eine Latte von zu meidenden Sonderfällen merken zu müssen (diese Tür ist tiefer also ducken, jener Boden glitschig also Schuhe wechseln usw)


Hört mal, was ich nur zu verstehen versuche ist:

wieso ist defined @array deprecated???


PS: cut&paste zw. firefox und emacs frißt Umlaute, sorry!

EDIT hab jetzt mal händisch sonderzeichen eingefügt.
TMTOWTDYOG (there's more than one way to dig your own grave)

View full thread wie testen ob leeres Array definiert wurde?