1
我打開一個文件,如下圖所示:重定向死亡消息記錄到文件
open (my $fh, '<', $query_file) or die "Query for specified metric does not exist : $!";
my $query = <$fh>;
close $fh;
當文件不存在,它寫入錯誤消息在控制檯上,但我想在一個文件中保存該消息。
它是如何做到的?
我打開一個文件,如下圖所示:重定向死亡消息記錄到文件
open (my $fh, '<', $query_file) or die "Query for specified metric does not exist : $!";
my $query = <$fh>;
close $fh;
當文件不存在,它寫入錯誤消息在控制檯上,但我想在一個文件中保存該消息。
它是如何做到的?
通過
$SIG{__DIE__}
指示的程序時一個致命的 例外是即將拋出被調用。該錯誤消息作爲 第一個參數傳遞。
你可以用它象下面這樣:
local $SIG{__DIE__} = sub {
my ($die_message) = @_;
open (my $log, ">>", '/tmp/die.log');
print $log $die_message;
};
爲什麼它被標記爲複製?我發了兩次嗎? –
我不認爲這是指定回答問題的重複。 OP希望知道如何將消息從'die()'重定向到文件,而不是如何寫入文件... – stevieb
最簡單的方法是重定向程序的STDERR,它也會捕獲警告。例如'script.pl 2> log'其他選項包括在'eval {}'中運行你的整個程序,或者你可以鉤入'$ SIG {__ DIE __}'。這些都不會捕獲符合您的要求的警告,但不太可能是您真正想要的。 – ikegami