Schrift
[thread]5815[/thread]

Array Prüfung



<< >> 5 Einträge, 1 Seite
jan10001
 2003-10-13 18:59
#62854 #62854
User since
2003-08-14
962 Artikel
BenutzerIn
[default_avatar]
Wenn man überprüfen will ob ein Array gefüllt ist, kann man das dann so schreiben?

Code: (dl )
1
2
3
if ( defined @test ) {
Array ist gefüllt;
}
renee
 2003-10-13 19:05
#62855 #62855
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
my @array = ();
if(@array){
print "1: Array gefüllt";
}
else{
print "1: Array leer";
}
@array = qw(1 2 3 4 5 6);
if(@array){
print "2: Array gefüllt";
}
else{
print "2: Array leer";
}

Ausgabe:
1: Array leer
2: Array gefüllt
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
jan10001
 2003-10-13 19:08
#62856 #62856
User since
2003-08-14
962 Artikel
BenutzerIn
[default_avatar]
So einfach. :)
Danke!\n\n

<!--EDIT|jan10001|1066057751-->
DS
 2003-10-13 20:15
#62857 #62857
User since
2003-08-04
247 Artikel
BenutzerIn
[default_avatar]
[quote=jan10001,13.10.2003, 16:59]Wenn man überprüfen will ob ein Array gefüllt ist, kann man das dann so schreiben?

Code: (dl )
1
2
3
if ( defined @test ) {
Array ist gefüllt;
}
[/quote]
Ich hab noch nie getestet, was passiert, wenn man einen Array mit defined testet, also hab' ich das mal nachgeholt... und das Ergebnis war durchaus abweichend von dem was ich erwartet hätte:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
print 1 if defined @array;
my @array;
print 2 if defined @array;
@array = ();
print 3 if defined @array;
@array = (0);
print 4 if defined @array;
@array = (1);
print 5 if defined @array;
@array = ();
print 6 if defined @array;
undef @array;
print 7 if defined @array;

Ausgabe:

Quote
456

Irgendwo hab ich mal gehört, daß erst mit undef der Speicher, den sich der Array im Laufe seines Lebens reserviert hat, wieder freigegeben wird. Genau das scheint defined hier zu berücksichtigen... solange der Array "Platz braucht", ist er definiert...

Zur Info: Windows XP mit ActivePerl 5.8

Also ich würd's nen Bug nennen... ;) (entweder in meinem Hirn oder in Perl)
pq
 2003-10-13 20:26
#62858 #62858
User since
2003-08-04
12207 Artikel
Admin1
[Homepage]
user image
[quote=DS,13.10.2003, 18:15]Ich hab noch nie getestet, was passiert, wenn man einen Array mit defined testet, also hab' ich das mal nachgeholt...[/quote]
aus perldoc -f defined:
              Use of "defined" on aggregates (hashes and arrays)
              is deprecated.  It used to report whether memory
              for that aggregate has ever been allocated.  This
              behavior may disappear in future versions of Perl.
              You should instead use a simple test for size:

                  if (@an_array) { print "has array elements\n" }
                  if (%a_hash)   { print "has hash members\n"   }
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
<< >> 5 Einträge, 1 Seite



View all threads created 2003-10-13 18:59.