Perl 5 マスター Wiki - Carp::Always
die , warn のエラーメッセージをすべて、Carp::longmess にしてくれます。


ためしてみよう。

普通 normal.pl


#!/usr/bin/perl
{
    package Hoge;

    sub hoge {
        die "hgoe hoge hoge";
    }
    ;
}

Hoge->hoge();
結果

hgoe hoge hoge at normal.pl line 8.

Carp::Always版(always.pl)

#!/usr/bin/perl

use Carp::Always;

{
    package Hoge;

    sub hoge {
        die "hgoe hoge hoge";
    }
    ;
}

Hoge->hoge();
結果

hgoe hoge hoge at always.pl line 9
        Hoge::hoge('Hoge') called at always.pl line 14
Carp版(carp.pl)

#!/usr/bin/perl


{
    package Hoge;
    use Carp qw(confess);

    sub hoge {
        confess "hgoe hoge hoge";
    }
    ;
}

Hoge->hoge();
結果

hgoe hoge hoge at carp.pl line 9
        Hoge::hoge('Hoge') called at carp.pl line 14

Always版はつまり confessを呼ばなければだめなのを、die(warn)をcallした際に自動に、同じ挙動にしてくれるということですね。また、スコープがパッケージごとではなく、アプリケーション全体になっています。

まとめ


  • die / warnのエラーメッセージが増える
  • 一度だけ呼べば、そのプロセスすべて適応
  • $SIG{_ _DIE_ _},$SIG{_ _WARN_ _}を触ってるので他でそれを触ってるモジュールがあれば競合する