Schrift
[thread]9055[/thread]

Testen ob Datei ein Verzeichnis ist: Fehler: "Use of uninitialized value"



<< >> 5 Einträge, 1 Seite
tscherfel
 2007-06-01 01:38
#77171 #77171
User since
2007-06-01
2 Artikel
BenutzerIn
[default_avatar]
Hallo,
ich habe mich in letzter Zeit etwas intensiver mit Perl beschäftigt und im großen und Ganzen klappt das schon ganz gut. Aber jetzt komme ich bei einem Problem nicht weiter:
Ich habe folgendes Testprogramm:
Code: (dl )
1
2
#!/usr/bin/perl -w
print (-d "/mnt/reelbox/video/Charmed/Charmed_-_Zauberhafte_Hexen/2007-05-30.16.00.50.99.rec");

Dies ist nur ein Minitest, welches das Problem in meinem eigentlichen Programm aufzeigt.
Ich arbeite auf Linux.
Das Verzeichnis existiert, und wenn ich das ausführe bekomme ich:
Quote
Use of uninitialized value in print at /home/thorsten/arbeit/test/test.pl line 2.

Wenn ich allerdings das ausführe:
Code: (dl )
1
2
#!/usr/bin/perl -w
print (-d "/mnt/reelbox/video/Charmed/Charmed_-_Zauberhafte_Hexen");

läuft das einwandfrei.
Meine Vermutung geht dahin, daß Perl die Punkte als Concatenation von Strings interpretiert. Aber ich weiß nicht, wie ich das lösen kann.

Hat jemand eine Idee?

Danke schon mal,
Tschüß,
Thorsten.
vayu
 2007-06-01 02:00
#77172 #77172
User since
2005-01-13
782 Artikel
BenutzerIn
[default_avatar]
erstens ... und auch vorletztens!

use strict

so ...

ich hab mir grad mal n verzeichnis angelegt was so heisst. perl printed mir einwandfrei ne "1" aus.

Die Punkte werden nicht als stringkonkatenation ausgelegt, da der string ja noch nicht durch " terminiert wurde.

könnte es sein, dass das obere evtl kein verzeichnis ist? :) dann wird auch nix ausgegeben.
lichtkind
 2007-06-01 04:08
#77173 #77173
User since
2004-03-22
5679 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
das zauberwort heisst quoten einfach slash davor oder verwende einfache anführungszeichen. alles was darin ist wird wörtlich genommen also nicht interpoliert.
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
betterworld
 2007-06-01 06:09
#77174 #77174
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
Ich vermute, Du hast den Sinn von -d etwas falsch verstanden.  Offenbar soll "/mnt/reelbox/video/Charmed/Charmed_-_Zauberhafte_Hexen/2007-05-30.16.00.50.99.rec" der Name von einer Datei (und keinem Verzeichnis) sein.  -d prueft, ob es ein Verzeichnis ist, und nicht etwa (was Du wahrscheinlich erwartest), ob das Verzeichnis "/mnt/reelbox/video/Charmed/Charmed_-_Zauberhafte_Hexen" existiert.  Die Arbeit, den Teil nach dem letzten Schrägstrich abzuschneiden, wird Dir hierdurch nicht abgenommen.  (Siehe dazu CPAN:File::Basename)

Also noch mal kurz und knapp:
Code: (dl )
1
2
-e "foo"; # Existiert "foo"?
-d "foo"; # Existiert "foo" UND ist "foo" ein Verzeichnis?

Wenn "foo" in diesem Fall kein Verzeichnis ist, gibt -d undef zurueck, daher auch Deine Warnung.\n\n

<!--EDIT|betterworld|1180664022-->
tscherfel
 2007-06-01 15:54
#77175 #77175
User since
2007-06-01
2 Artikel
BenutzerIn
[default_avatar]
Ich Idiot!!!
In meinem eigentlichen Programm baue ich den Pfad zusammen und jetzt eben fällt mir auf, daß dort ein Teil fehlt.
Somit stimmt der Pfad nicht und das Verzeichnis existiert tatsächlich nicht. :D
Ich sollte vielleicht vorher testen, ob der Pfad existiert.

Manchmal hilft es über eine Sache einfach zu reden.

Vielen Dank an Alle fürs mitreden.

@vayu:
Ich verwende inzwischen immer use strict.
Nur in diesem kleinen Testprogramm ohne Variablen habe ich mir gedacht, ich lasse es hier mal weg.
Aber in Zukunft werde ich immer mit use strict posten. ;)

Tschüß,
Thorsten.
<< >> 5 Einträge, 1 Seite



View all threads created 2007-06-01 01:38.