サブルーチンのエイリアスを型グロブで作る

知らなかったのでメモ。

#!/usr/bin/env perl
use strict;
use warnings;

sub hoge {
  print "hello\n";
}

*foo = \&hoge;

foo();

この例題を実行すると元気にhelloと表示される。 これは型グロブを使ってhogeサブルーチンのエイリアス的にfooを登録している。 代入しているのはサブルーチンリファレンスなので参照している実態は同じとなる。

また代入先も変数そのものではなくて型グロブに対してなので、呼び出しが$foo->()ではない。

世間で使われているものだとSmart::Argsに使われていた。

metacpan.org

よくみたら公式ドキュメントにそれっぽい記述があった。 これができるのも面白いけどuse strict環境で普通に実行できたのがびっくり。。。。