Carp

&Carp::carpとか&Carp::croakなんて、エラーチェックに必要だけど、実際にエラーが起きない限りは必要ないわけで。それなのに必ずモジュールを読み込むのもアレなので、必要に応じてロードするようにしました。

package Tangerine::Core::Carp;

use strict;
use warnings;
use version; our $VERSION = qv('0.0.1');
use base qw/Exporter/;

our @EXPORT_OK = qw/carp croak/;

sub carp {
    require Carp;
    goto &Carp::carp;
}

sub croak {
    require Carp;
    goto &Carp::croak;
}

1;

gotoはこういうときに使うものだよね。実際にcarpcroakが呼ばれない限り、Carpモジュールはロードしません。