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.