迪拉斯: Fehler bei Dateiverarbeitung

Beitrag lesen

Hey,

Was bedeutet die Meldung Useless use ....?

http://perldoc.perl.org/perldiag.html#Useless-use-of-%25s-in-void-context
benutze in Zukunft use diagnostics; an Stelle von use warnings;, wenn du die Meldungen erklärt haben möchtest.

Ist dies die Ursache des Fehlers?

Nein, die Ursache liegt in der Verwendung des ||-Operators. Du berechnest einen logischen Ausdruck, aber stellst nichts mit dem erhaltenen Ergebnis an. Normalerweise fängt man das in einer Variable auf oder schreibt es weg. Beispiel:

  
my $result = $one || $other;  
print $one || $other;  

In deinem Ausdruck verpufft das Ergebnis in heißer Luft.

  
$one || $other;  

So. Das eigentliche Problem ist, dass du den falschen Operator verwendet hast. Du sollst or verwenden, der bindet nicht so stark wie || (siehe dazu die Rangreihenfolge der Operatoren). Wenn du das nächste Mal mit Dateien arbeitest, halte dich an die Stilregeln und formuliere so:

  
{  
    open my $incfile, '<', 'meta.inc' or die "could not open meta.inc for reading: $!";  
    @myinctext = (<$incfile>);  
    close $incfile;  
};  
print $myinctext[0];  

Benutze Skalare statt immer global gültiger Filehandle-Bezeichner. Beschränke den Gültigkeitsbereich von Variablen auf das Nötigste. Benutze die 3-Argumente-Form von open. Benutze or, um Fehlermeldungen anzuketten. Schreibe genaue und aussagekräftige Fehlermeldungen. Schreibe $!, um die Betriebssystemfehlermeldung nach einem Systemaufruf wie open zu erhalten. Benutze () um den <>-Operator, um Listenkontext zu erzwingen. Vermeide unnötige Stringifizierung von Einzelausdrücken. Notiere indizierte Listen mit $, nicht @.

Die Stilregeln kannst du nachlesen in http://perldoc.perl.org/perlstyle.html, http://www.ora.de/catalog/pperl3/ und http://www.ora.de/catalog/perlbpger/.

--
水-金-地-火-木-土-天-海-冥