Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

STIRB! :-) Legitimer Ausstieg bei Problemen mit dem Öffnen von Textdateien...

Frage Entwicklung Perl

Mitglied: FA-jka

FA-jka (Level 2) - Jetzt verbinden

12.11.2014, aktualisiert 13.11.2014, 1471 Aufrufe, 3 Kommentare

Man findet ja öfter mal so etwas:

01.
open (DATEI, "< Dateiname") || die "$!\n";
Das perl Script wird in einem bash Script aufgerufen. Dort möchte ich den Fehlercode auswerten. Ginge in dem Fall auch so etwas?

01.
open (DATEI, "< Dateiname") || { 
02.
  print "Fehler 2 - Datei kann nicht geöffnet werden: $!\n"; 
03.
  exit 2; 
04.
}
Was mich wundert ist die Tatsache, dass man in diversen Foren / Tutorials / Büchern usw. immer "nur" die erste Lösung findet. Aber so eine Vollbremsung ist doch irgendwie kein schöner Stil, oder?
Mitglied: Arano
12.11.2014, aktualisiert um 15:28 Uhr
Hallo FA-jka,

Ob "so etwas" ging konnte ich gerade selber nicht herraus finden durch ausprobieren.
Aber du musst ja nicht "die()" verwenden, schreibe die doch deine eigene Subroutine:
01.
#!/usr/bin/perl 
02.
 
03.
 
04.
print "öffne datei die es nicht gibt:\n"; 
05.
 
06.
 
07.
#open( FH, "< /errorfile" ) || die "$! tot"; 
08.
open( FH, "< /errorfile" ) || myError( $!, 157 ); 
09.
print "...never seen..."; 
10.
 
11.
 
12.
exit 0; 
13.
 
14.
 
15.
 
16.
 
17.
sub myError 
18.
19.
    print "Fehler: $_[0]\n"; 
20.
    exit $_[1]; 
21.
}
Die Shell dazu sieht dann so aus:
01.
arano:~$ ./test.pl  
02.
öffne datei die es nicht gibt: 
03.
Fehler: Datei oder Verzeichnis nicht gefunden 
04.
arano:~$ echo $? 
05.
157 
06.
arano:~$ 


Hey, ich habe doch noch etwas weiter gesucht und bin da fündig geworden: stackoverflow.com
01.
open( FH, "< /errorfile" ) || do { print "Fehler: $!\n"; exit 157; };


~Arano
Bitte warten ..
Mitglied: FA-jka
12.11.2014 um 16:37 Uhr
Ja, genau so habe ich mir das vorgestellt. Ist doch irgendwie "schöner", oder?

Es hat mich halt etwas stutzig gemacht, dass nahezu alle ein pragmatisches "die" empfehlen. Irgendwie erscheint mir das nicht besonders stilvoll.
Bitte warten ..
Mitglied: Arano
LÖSUNG 12.11.2014, aktualisiert 13.11.2014
Nein das ist es auch nicht.
Denn damit wird auch die weitere Ausführung beendet.
Aber eigentlich ist es oft noch sinnvoll weiteren Programmcode auszuführen, z.B. um den Fehler in eine Logdatei zu schreiben, um andere geöffnete Ressourcen (Dateien, Datenbanken, Sockets, ect. ) zu schließen, temporär erstellte Dateien zu löschen, Detail9ertere Informationen auszugeben, in GUIs nur eine Melsung ausgeben aber das Programm eben nicht töten....
Da gibts sicher noch viele gute Gründe.

Allerdings in Tutorials oder Beispielen ist die einfachste veranschaulichung, denn eigentlich geht es da ja meist um andere Funktionen die beschrieben werden / auf denen der Schwerpunkt liegt.


~Arano
Bitte warten ..
Ähnliche Inhalte
Java
gelöst Textdatei in Array speichern (zeilenweise) (1)

Frage von Bruchsal zum Thema Java ...

VB for Applications
Import Textdatei von Dateiname aus Zelle (2)

Frage von grasihuepfer zum Thema VB for Applications ...

Batch & Shell
gelöst BATCH: Daten aus Textdatei auslesen und in neue Textdatei separieren (9)

Frage von Manuel1234 zum Thema Batch & Shell ...

Batch & Shell
gelöst Powershell - In Textdatei suchen und ersetzen (5)

Frage von Raaja89 zum Thema Batch & Shell ...

Neue Wissensbeiträge
Windows Server

Umstellung SHA 1 auf SHA 2 - Migration der CA von CSP auf KSP

Tipp von Badger zum Thema Windows Server ...

Windows 10

Quato DTP94 unter Windows 10 x64 installieren und verwenden

Anleitung von anteNope zum Thema Windows 10 ...

Windows 10

Win10 1703 und Nutzerkennwörter bei Ersteinrichtung - erstaunliche Erkenntnis

(15)

Erfahrungsbericht von DerWoWusste zum Thema Windows 10 ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
CNC Maschinen verlieren Netzwerkverbindung (kurioser Fehler) (22)

Frage von NoHopeNoFear zum Thema LAN, WAN, Wireless ...

Webentwicklung
Aktuellen Mitarbeiter auf Homepage anzeigen (13)

Frage von alemanne21 zum Thema Webentwicklung ...

Festplatten, SSD, Raid
Raid-Controller (Areca) Datenverlust trotz R5 (11)

Frage von sebastian2608 zum Thema Festplatten, SSD, Raid ...

Windows Server
gelöst Parameter Übergabe Terminal Server (9)

Frage von ThomasKern zum Thema Windows Server ...