warn LIST

發出警告,通常會將其列印到 STDERRwarn 以與 die 相同的方式詮釋其運算元 LIST,但當 LIST 為空或產生空字串時,其預設值略有不同。如果它為空且 $@ 已包含例外值,則會在附加 "\t...caught" 之後使用該值。如果它為空且 $@ 也為空,則會使用字串 "Warning: Something's wrong"

預設情況下,會將從運算元 LIST 衍生的例外轉換為字串並列印到 STDERR。可以透過安裝 $SIG{__WARN__} 處理常式來變更此行為。如果存在此類處理常式,則不會自動列印任何訊息;處理常式有責任以其認為合適的方式處理例外(例如,將其轉換為 die)。因此,大多數處理常式都必須安排實際顯示他們不準備處理的警告,方法是在處理常式中再次呼叫 warn。請注意,這非常安全,不會產生無限迴圈,因為不會從其中呼叫 __WARN__ 鉤子。

您會發現此行為與 $SIG{__DIE__} 處理常式略有不同(後者並不會抑制錯誤文字,但可以再次呼叫 die 來變更錯誤文字)。

使用 __WARN__ 處理常式提供了一個強大的方式來讓所有警告(甚至所謂的強制警告)保持沉默。範例

# wipe out *all* compile-time warnings
BEGIN { $SIG{'__WARN__'} = sub { warn $_[0] if $DOWARN } }
my $foo = 10;
my $foo = 20;          # no warning about duplicate my $foo,
                       # but hey, you asked for it!
# no compile-time or run-time warnings before here
$DOWARN = 1;

# run-time warnings enabled after here
warn "\$foo is alive and $foo!";     # does show up

請參閱 perlvar 以取得有關設定 %SIG 項目的詳細資料和更多範例。請參閱 Carp 模組以取得使用其 carpcluck 函數的其他種類警告。