no indirect; / no indirect ':fatal';

間接オブジェクト構文で警告を出したり致命的エラーを出したりするプラグマ。おなじみのPL_checkハックで実装されている。
以下のようなありがちな実行時エラーをコンパイルエラーに変えることができる。

use Test::More tests => 2;
use Foo;

no indirect ':fatal';

isa_ok Foo->new(),"Foo";# NG: Foo->isa_ok()->new()
ok Foo->bar();          # NG: Foo->ok()->bar()

実装方法がautoboxのそれとは少し違うのが気になる。PL_check[...]をモジュールのロード時に完全に置き換えてしまうので,indirectのスコープ外でのオーバーヘッドが大きくなる。一方,ヒントハッシュのキーのハッシュ値をあらかじめ計算することで,スコープ内でのオーバーヘッドはむしろautoboxよりも小さそうだ。もっとも,いずれにせよコンパイル時のオーバーヘッドなので実行速度とは関係ないのだが。