こんな書き方もできるんだ

今日、後輩のPerlコードをレビューしていたのですが、おや、と思うような書き方を見つけました。

package Foo;

sub hoge {
    my ($self, $bar) = @_;

    baz->($self, $bar);  # こんな書き方できるの?    
}

sub baz {
    my ($self, $bar) = @_;
}

$self->baz($bar) とかくのが普通だと思いますし、baz($self, $bar) というのも、まあ使えることは理解できます。
baz->($self, $bar) って何だろう…。普通に動いていましたが。

(\&baz)->($self, $bar);

と書かれれば、これもまた、動き自体は理解できます。

"baz"->($self, $bar);

あるいは、上記のように、文字列を書いてくれれば、確かにPerlのメソッドってコードリファレンスじゃなくて文字列でも動くよなと思いながら、納得します。

でも、barewordだと、「お!」と驚いてしまった。
奥が深いのか、あるいは私が無知なのか。

そんなことを思いながら、老害として「こんな書き方をするんじゃない」という訂正指示を出しました。