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

styx-cc
 2008-03-08 07:55
#106828 #106828
User since
2006-05-20
533 Artikel
BenutzerIn

user image
Also laut meinem Test kommt es aufs gleiche Raus:
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
26
#!/usr/bin/perl -w
use strict;

my @liste;
@liste = lade_liste($ARGV[0]);

if(defined($liste[0])) {
  if(scalar(@liste)) {
    print "mach was\n";
  }
  else { 
    warn "Datei war leer, kann nicht weiter machen!" 
  }
} else { 
  warn "Datei konnte nicht geladen werden ($!)" 
}

sub lade_liste {
  my $pfad = shift;
  my @l;
  if (open my $fh, '<', $pfad) {
    @l=<$fh>;
    close $fh;
  }
  return @l;
}


Und hier 2 Aufrufe + Ausgabe, "test.txt" (leere Datei) gibt es, "test 2.txt" nicht:
Code: (dl )
1
2
3
4
5
6
7
8
9
community$ perl defined_array.pl test.txt
defined(@array) is deprecated at defined_array.pl line 7.
(Maybe you should just omit the defined()?)
Datei konnte nicht geladen werden () at defined_array.pl line 15.

community$ perl defined_array.pl test2.txt
defined(@array) is deprecated at defined_array.pl line 7.
(Maybe you should just omit the defined()?)
Datei konnte nicht geladen werden (No such file or directory) at defined_array.pl line 15.

Theoretischerweise haette der Interpreter ja den else-zweig ausfuehren muessen und "Datei war leer, kann nicht weiter machen!" ausgeben muessen...

Also scheint defined lediglich zu pruefen, ob ein Skalar Daten enthaelt oder nicht, und damit ist dann ein if(scalar @array) sozusagen das defined unter den Arrays.
Moege man mich verbessern =)

edit: thema leicht verfehlt
Pörl.

View full thread wie testen ob leeres Array definiert wurde?