warn LIST
Duoda STDERR žinutę, kaip kad die
, bet ne išeina ir neišmeta prieštaravimo.
Jei LIST tuščias, o $@
jau turi reikšmę (dažniausiai iš prieš tai ėjusio eval), ta reikšmė yra naudojama po pridedamo "\t...caught"
$@
. Tai naudinga, nes yra beveik, tačiau ne visiškai kaip die
.
Jei $@
tuščias, tada stringas "Warning: Something's
wrong"
naudojamas.
Neišvedama jokia žinutė, jei yra įdiegtas $SIG{__WARN__}
valdiklis. Tai yra valdiklio atsakomybė tvarkytis su žinute kaip jam tinkama (kaip, pvz., paversti ją į die
). Dauguma valdikliu privalo pasirengti iš tikro parodyti įspėjimus, su kuriais nėra pasirengę tvarkytis, iškviesdami warn
valdiklyje. Įsidėmėkite, kad tai saugu ir nepadarys begalinio ciklo, nebent __WARN__
kabliukai (hooks) nėra iškviečiami iš labiausiai vidinio.
Pamatysite, kad ši elgsena kiek kitokia nuo $SIG{__DIE__}
valdiklių (kurie nesuspaudžia klaidos teksto, bet geriau iškviečia die
vėl, kad jį pakeistų).
Naudojant __WARN__
valdiklį atsiranda galingas būdas nutildyti visus įspėjimus (taip vadinamus būtinuosius). Pavyzdys:
# 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
Žr. perlvar dėl deatlių %SIG
elementų nustatymams ir daugiau pavyzdžių. Žr. Carp modulį kitoms įspėjimų rūšims, naudojant carp() ir cluck() funkcijas.