2016-11-28 22 views
1

我打開一個文件,如下圖所示:重定向死亡消息記錄到文件

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

當文件不存在,它寫入錯誤消息在控制檯上,但我想在一個文件中保存該消息。

它是如何做到的?

+0

爲什麼它被標記爲複製?我發了兩次嗎? –

+1

我不認爲這是指定回答問題的重複。 OP希望知道如何將消息從'die()'重定向到文件,而不是如何寫入文件... – stevieb

+0

最簡單的方法是重定向程序的STDERR,它也會捕獲警告。例如'script.pl 2> log'其他選項包括在'eval {}'中運行你的整個程序,或者你可以鉤入'$ SIG {__ DIE __}'。這些都不會捕獲符合您的要求的警告,但不太可能是您真正想要的。 – ikegami

回答

4

perlvar

通過$SIG{__DIE__}指示的程序時一個致命的 例外是即將拋出被調用。該錯誤消息作爲 第一個參數傳遞。

你可以用它象下面這樣:

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