Подтвердить что ты не робот

Как получить набор предупреждающих проверок, которые в настоящий момент включены в модуле perl?

В perllexwarn определены все предупреждения, которые можно установить.

Но здесь ничего не говорится о том, как распечатать, какие предупреждения я включил в настоящее время.

например:.

use strict;
use warnings;

print warnings::enabled->pretty_print(); #fictional...

Как это возможно?

Пример:

use strict;
use 5.012;
use warnings;

my $aaa;
say "$aaa";

say warnings::enabled("uninitialized") ? "yes" : "no";

Вышеуказанное выведет:

Use of uninitialized value $aaa in string at y line 6.

no

Таким образом, категория "неинициализированного" предупреждения "установлена", потому что она печатает предупреждение, но warnings::enabled("uninitialized") не возвращает true.

4b9b3361

Ответ 1

Чтение perllexwarn

... функции, полезные для авторов модулей. Они используются, когда вы хотите сообщить о специальном предупреждении модуля вызывающему модулю включенных предупреждений через прагму "предупреждения".

Если я правильно понимаю, это означает, что функции (enabled, warnif) работают только для предупреждений, специфичных для модуля, а не для стандартных категорий. (Вероятно, отсутствует недостающее "что" до "имеет" в документации.)

Обновление: Кажется, что стандартные категории работают, но только в модуле:

package MY;
use warnings::register;
sub S {
    my $x;
    print $x, "\t";
    print warnings::enabled("uninitialized"),"\n";
}

package main;
use warnings;
MY::S();
no warnings;
MY::S();