Masteries

技術的なことや仕事に関することを書いていきます.

「print FILEHANDLE LIST」って間接オブジェクト記法なの?

  1. 違う

…ということで、Perl Advent Calendar 2024の24日目の記事です*1

papix.hatenablog.com

以前にこのエントリで、print STDERR 'foobar'; は間接オブジェクト記法で、実際は STDERR->print('foobar') である、と書きました。そして print STDERR 'foobar';no feature qw(indirect); でも動作して、これは「よく使われるパターンなので例外なのではないか?」と書いていました。

ただ、改めてperldocのprintを見ると、print FILEHANDLEprint FILEHANDLE LISTという構文で、「一段階の間接指定が行なえ」る、と書かれていることに気付きました。

perldoc.jp

…なので、「print FILEHANDLE LIST」は間接オブジェクト記法ではなくてprint関数の1つの構文であり、よって先の記事の記述は、「よく使われるパターンなので例外」ではなくて、「そもそもそういう構文なので、関節オブジェクト記法が使えなくなっても、引き続き利用できる」、というのが正しい説明になりそうです。

もしかしたら(先の記事を読んだ方々も)とっくの昔に知っていた内容かもしれませんが、自分は最近までずっと勘違いをしていたので、Perl Advent Calendar 2024という機会を使って訂正の記事を書かせていただいた次第です。

*1:26日に公開されているように見えるのはご容赦ください…