我正在使用do()執行 perl 腳本。我想確保它進行了正確的錯誤檢查,但我注意到當我使用do(). 我故意在腳本中留下以下警告。我在命令列上運行它時看到它
Useless use of numeric eq (==) in void context at utils/queryEvent/query_event.pl line 47.
當我使用do()時,此訊息被禁止。我在perlvar中看到$@不包含警告,所以我嘗試在呼叫之前添加它do(),但我仍然什么也沒看到。
local $SIG{__WARN__} = sub {
print "Warning @_\n";
};
do(...);
有沒有辦法我仍然可以列印編譯/決議警告?
我在 Windows 10 上使用 Perl v.5.22.1。
添加了編輯:
腳本呼叫do()和正在運行的腳本都do()具有use strict;和use warnings;. 只有決議警告沒有出現。如果我在 do 腳本中呼叫警告,那么我會看到(我假設是標準錯誤)。
編輯:
添加示例腳本。
一個最小的可重現版本如下
use strict;
use warnings;
sub test
{
return 1;
}
main:
{
(test() == 1);
}
呼叫腳本
use strict;
use warnings;
main:
{
do('test.pl');
}
uj5u.com熱心網友回復:
你誤會了。do至少不會影響警告。
沒有警告,因為沒有任何東西會引起警告。(test() == 1)不在 void 背景關系中進行評估。相反,它的結果由do.
但是,雖然警告沒有被靜音,但例外正在被靜音。修復這個將修復另一個。
1向加載的檔案添加尾隨do,并更改do如下:
do('test.pl')
or die( "Can't execute `./test.pl`: ".( $@ // $! ) );
尾隨1用于通知“呼叫者”是否發生錯誤。(test() == 1)正如預期的那樣,這具有在無效背景關系中評估原因的副作用。
uj5u.com熱心網友回復:
-w或命令列開關將在-W整個程式中啟用警告,包括通過do陳述句包含的代碼。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/506214.html
標籤:perl
