Perl-модуль Carp::Clan#
Описание#
Carp::Clan — Perl-модуль, расширяющий функциональность стандартного модуля 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 шаблон пропуска пакетов теряет смысл, поскольку в этом случае все равно выводится полная трассировка стека.