2016-11-28 6 views
1

ich eine Datei wie unten öffnen:Redirect sterben Meldungen in eine Datei

open (my $fh, '<', $query_file) or die "Query for specified metric does not exist : $!"; 
my $query = <$fh>; 
close $fh; 

Wenn die Datei nicht existiert es die Fehlermeldung auf der Konsole schreibt, aber ich möchte diese Nachricht in einer Datei speichern.

Wie kann es gemacht werden?

+0

Warum es als Duplikat markiert? habe ich es zweimal gepostet? –

+1

Ich glaube nicht, dass dies ein Duplikat der angegebenen Frage ist. Das OP möchte wissen, wie man Nachrichten von 'die()' in eine Datei umleitet, nicht wie man in eine Datei schreibt ... – stevieb

+0

Der einfachste Weg ist, die STDERR des Programms umzulenken, die auch Warnungen auffängt. z.B. 'script.pl 2> log' Andere Optionen beinhalten das Ausführen Ihres gesamten Programms in einem' eval {} 'oder Sie können in' $ SIG {__ DIE __} 'einhaken. Keines dieser Programme wird Warnungen abfangen, die Ihrer Anfrage entsprechen, sind aber unwahrscheinlich, was Sie wirklich wollen. – ikegami

Antwort

4

Von perlvar

Die Routine von $SIG{__DIE__} angezeigt wird aufgerufen, wenn eine fatale Ausnahme im Begriff ist, geworfen zu werden. Die Fehlermeldung wird als erstes Argument übergeben.

Sie können es wie unten verwenden:

local $SIG{__DIE__} = sub { 
    my ($die_message) = @_; 
    open (my $log, ">>", '/tmp/die.log'); 
    print $log $die_message; 
};