Hallo,
#!C:\Perl\bin\Perl.exe -w
use CGI;
Und ich dachte, 'use strict' hat sich inzwischen rumgesprochen;-)
$query = new CGI;
@daten = '';
Dir ist hoffentlich klar, daß Du damit kein leeres Array erzeugts, sondern eines in dem im ersten Arrayelement ein leerer String steht.
$verzeichnis = ".";
print $query->header;
opendir(DIR, "$verzeichnis") or die "Verzeichnis kann nicht geoeffnet werden : $!\n";
while ($file = readdir(DIR)) {
if ($file =~ /datenbank.txt/) {
open(FILE,"datenbank.txt") or die "Kann Datenbank nicht oeffnen : $!\n";
@daten = <FILE>;
}
}
Hier drei Anmerkungen von mir:
1.) Du kannst die Existenz einer Datei auch mit
if(-e $datei)
{
# mach was mit der Datei
}
else
{
# hmm, nix gefunden
}
überprüfen. Abgesehen davon, daß es einfach zu schreiben ist, ist es auch wesentlich performanter.
2.) wenn Du schon $verzeichnis durchsuchst, solltest Du dann auch
open(FILE,"$verzeichnis/$file") or die "blablabla";
für den gewünschten File machen.
Das macht zwar im aktuellen Zustand Deines Scripts keinen Unterschied, aber irgendwann änderst Du vielleicht die Zeile
$verzeichnis = '.';
auf
$verzeichnis = '/and/now/to/something/complete/different';
und suchst dann bis zur Verzweiflung, warums das Script plötzlich nicht mehr funktioniert.
3.)
if ($file =~ /datenbank.txt/) {
open(FILE,"datenbank.txt") or die "Kann Datenbank nicht oeffnen : $!\n";
Ist eigentlich auch 'suboptimal', da das Matching auch auf Dateinamen wie 'kopie von datenbank.txt', 'datenbank2txt' oder 'was auch immer fuer eine datenbank,txt sollte auf jeden fall dabei sein' anspringt.
wenn dann
if ($file =~ /^datenbank.txt$/) {
if (@daten eq '') {
print 'Leer!';
}
Hmm, was da genau passiert, ist mir auch schleierhaft. Wird @daten in einen String gejoint (anscheinend nicht) oder implizit ein 'scalar @daten' ausgeführt, oder irgendwas anderes. Weiß auch nicht. Unsicher ist das allemal.
Hier zwei mögliche Lösungen
unless(-e "$verzeichnis/datenbank.txt")
{
print 'Leer!';
}
else
{
# einlesen und verarbeiten der Daten
}
(Das unless deshalb, um elegant den codemäßig kürzeren Teil eventuell nach vorne zu bringen, was die Lesbarkeit des Scripts erhöht.)
oder
my @daten;
hier der Code, der die Daten eventuell aus der Datei einliest
if(scalar @daten ==0)
{
print 'Leer!';
}
Grüße
Klaus