Thread Netzwerkverzeichnis mit opendir
(16 answers)
Opened by Gast at 2006-01-20 02:48
1. warum nicht zuerst mal bei
Code: (dl
)
my $fd = $smb->opendir("smb://bioboss/shared/Hubert/Blast"); fehler abfangen? ist da 100% sicher, dass da nie was passieren kann? 2. my-variablen immer so knapp wie moeglich definieren, also z.B. nicht sondern Code: (dl
)
foreach my $file (@thefiles) { dann ist $file nur im block der foreachschleife gueltig, und nicht auch vorher und nachher. der Wert von $file ist nach der schleife genau derselbe wie vor der schleife, weil for(each) da einen alias auf das listenelement bildet; wenn man wirklich nach der schleife $file braucht, dann kann man es ja auch dann definieren/deklarieren, z.B. 3. genauso bei @rawdata: wenn du es ausserhalb der aeusseren schleife nicht verwendest, dann muss es da auch nicht deklariert sein. 4. Code: (dl
)
open (bigShot, ">>hello_Jesus.txt") || die ("Could not open file. $!"); Es wird empfohlen, Filehandles immer mit grossbuchstaben zu schreiben. Ich empfehle folgendes konstrukt: Code: (dl
)
1 my $fileJesus = "hello_Jesus.txt"; durch den lexikalischen Fielehandle ist dieser nur innerhalb dieses blockes gueltig, und du musst dich (kaum) darum kuemmern, was fuer filehandlenamen ausserhalb alle verwendet werden. Code: (dl
)
1 open (FH, "<", $file1) or die; hier liest dann die while-schleife die erste zeile aus $file1 und dann ab der zweiten zeile von $file2... und wenn sowas ueber mehrere subroutinen hinweg verstreut ist, wird sowas manchmal sehr schwer zu finden 5. die zeilen kann man auch zusamenfassen, wenn du @raw_data nur fuer die schleife verwendest Code: (dl
)
foreach my $wrestler (<DAT>) { das wuerde die komplette datei auf einmal in den RAM lesen und danach ueber die einzelnen zeilen laufen (weil <DAT> im listenkontext verwendet wird, was die komplette datei einliest). wenn du immer nur eine zeile brauchst und nicht mehrere gleichzeitig, ist der folgende weg sparsamer: weil <..> im skalaren kontext immer nur die naechste zeile einliest, und somit immer nur eine zeile im RAM ist (gerade bei groesseren Dateien ist das ein muss) 6. Code: (dl
)
print bigShot ($wrestler); kann eventuell mal probleme bereiten, wenn es eine funktion namens bigShot gibt (nicht allerdings mit lexikalischen Filehandles) deshalb besser entweder: Code: (dl
)
print (BIGSHOT "blabla\n"); oder Code: (dl
)
print BIGSHOT "blabla\n"; oder noch besser: Code: (dl
)
print $BIGSHOT "blabla\n"; perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/ |