Thread Frage zu "-e !" Schalter bei if - Abfrage (5 answers)
Opened by YAPD at 2019-05-28 21:07

Linuxer
 2019-05-28 23:18
#190054 #190054
User since
2006-01-27
3888 articles
HausmeisterIn

user image
In meinen Augen gibt es keinen Grund dafür. In aller Regel ist das falsch im Sinne der Programmlogik.
Das ist ein komplizierter Weg um sinngemäß "if ( false ) {}" zu sagen.

Bei -e ! "string" wird die Negation auf "string" angewendet und das Ergebnis davon mit -e dann auf Existenz überprüft, was wohl im Ergebnis ein "existiert nicht" ergibt und vom if () als FALSCH gewertet wird. Damit wird dann der Block nicht ausgeführt.
Das passiert, egal ob die Datei existiert oder nicht.

Davon ab:

Wenn in Deinem gezeigten Code-Fragment die Datei dann eben wirklich nicht existiert, schlägt als nächstes der open() Befehl fehl (was für das if ein FALSCH bedeutet ) und der folgende else-Zweig wird ausgeführt und eine - in diesem Fall - falsche Aussage wird ausgegeben.

Die Aussage "Keine Berechtigung" ist halt nur korrekt, wenn genau das der Fall ist und die Berechtigung nicht stimmt.

Sinniger ist es (auch wenn es dann potentiell auf Englisch kommt), die Variable $! auszugeben, um den wahren Grund zu erfahren.

Beispiel:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
#! /usr/bin/perl
use strict;
use warnings;


my $file = "/tmp/i_am_not_there.txt";

if ( open my $fh, '<', $file ) {
    print "oops\n";
}
else {
    die "Oeffnen von $file fehlgeschlagen: $!\n";
}


Ergibt dann:

Code: (dl )
1
2
$ perl /tmp/test.pl 
Oeffnen von /tmp/i_am_not_there.txt fehlgeschlagen: No such file or directory
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!

View full thread Frage zu "-e !" Schalter bei if - Abfrage