Perl-модуль Carp::Clan#

Описание#

Carp::ClanPerl-модуль, расширяющий функциональность стандартного модуля Carp. Предназначен для более точного формирования сообщений об ошибках в контексте иерархии взаимосвязанных модулей (Clan), позволяя скрывать внутренние вызовы и указывать на источник ошибки с точки зрения внешнего вызывающего кода.

Данный модуль основан на файле Carp.pm. Был модифицирован таким образом, чтобы пропускать все имена пакетов, соответствующие шаблону, указанному в списке qw() (или в аргументах) директивы use.

Важно

Функции Carp::Clan не поддерживают объекты-исключения. Если первым аргументом передается ссылка, модуль просто вызывает стандартные функции обработки ошибок и предупреждений - die() или warn(), - в зависимости от контекста.

Функции модуля:

  • carp - выдает предупреждение об ошибке (с точки зрения вызывающего кода);

  • cluck - выдает предупреждение об ошибке с трассировкой стека вызовов;

  • croak - завершает выполнение с сообщением об ошибке (с точки зрения вызывающего кода);

  • confess - завершает выполнение с сообщением об ошибке и трассировкой стека вызовов.

Установка#

Для установки модуля Perl Carp::Clan выполните команду:

dnf install perl-Carp-Clan

Примеры использования#

При подключении с шаблоном, например:

use Carp::Clan qw(^Pack::);

Все пакеты, чьи имена соответствуют регулярному выражению ^Pack::, считаются частью одного клана (группы внутренних модулей). Ошибки, возникающие в любом из этих модулей, будут указывать на строку в внешнем вызывающем коде (например, в tool.pl), а не на внутренние вызовы между Pack::A, Pack::B и т.д.

Если шаблон не указан:

use Carp::Clan;

Модуль автоматически скрывает только текущий пакет, делая его «невидимым» в диагностических сообщениях — как если бы ошибки возникали сразу на уровне его вызова.

Этот механизм особенно полезен, когда модули взаимодействуют друг с другом, но не образуют иерархию наследования (т.е. анализ массива @ISA, как в оригинальном модуле Carp.pm, не дает нужного результата), и требуется представить их как единый логический компонент для конечного пользователя.

Принудительная трассировка стека вызовов#

При отладке Carp::Clan настраивается так, что функция croak ведет себя как confess, а carp — как cluck, обеспечивая вывод полной трассировки стека вызовов. Это позволяет точно определить источник ошибки или предупреждения.

Данная функциональность активируется либо импортом несуществующего символа verbose, либо установкой глобальной переменной $Carp::Clan::Verbose в истинное значение.

Чтобы включить verbose, выполните команду:

use Carp::Clan qw(verbose);

Внимание

В списке qw() директивы use можно одновременно указать как шаблон семейства пакетов, так и строку verbose. Однако при включенном режиме verbose шаблон пропуска пакетов теряет смысл, поскольку в этом случае все равно выводится полная трассировка стека.