bool の overload

Boolean, string and numeric conversion
'bool', '""', '0+',

If one or two of these operations are not overloaded, the remaining ones can be used instead. bool is used in the flow control operators (like while) and for the ternary ?: operation. These functions can return any arbitrary Perl value. If the corresponding operation for this value is overloaded too, that operation will be called again with this value.

(略)

フロー制御と三項演算子の時だけ使われるんですか?と恐怖したのでテストしてみました。
#!/usr/bin/perl

my $a = new True;

warn "true\n"    if $a;		# line 5
warn "true\n"    if 0 && $a;

my $b = 1 && $a;
warn "$b\n";			# line 9

warn "true\n"    if $b;		# line 11

my $c = 1 && $a && 0;		# line 13
warn "$c\n";

warn "true\n"    if $c;

exit;


package True;

use overload (
    bool => \&_opo_bool,
    '""' => \&_opo_str,
);

sub new {
    my ($class) = @_;
    return bless {}, $class;
}

sub _opo_bool {
    my ($self) = @_;
    my ($pkg, $fname, $line) = caller();
    print {*STDERR} "bool-op called from $fname line $line.\n";
    return 1;
}

sub _opo_str {
    my ($self) = @_;
    my ($pkg, $fname, $line) = caller();
    print {*STDERR} "str-op  called from $fname line $line.\n";
    return 'True';
}
文字列化演算子オーバーロードしたのは,上記引用で太字にした部分の前のとこに書いてあるように,それがないと文字列化時にbool演算子が代用される可能性があるからです(実際,それをはずしてやってみるとわかります)。 実行結果は,
bool-op called from test.pl line 5.
true
str-op  called from test.pl line 9.
True
bool-op called from test.pl line 11.
true
bool-op called from test.pl line 13.
0
のようになりました。リストと照らし合わせるとわかりますが,基本的に「論理演算の必要が出てきた時に実行される」みたいですね。 Perl の暗黒面を覗いてしまった気がします。