- 違う
…ということで、Perl Advent Calendar 2024の24日目の記事です*1。
以前にこのエントリで、print STDERR 'foobar';
は間接オブジェクト記法で、実際は STDERR->print('foobar')
である、と書きました。そして print STDERR 'foobar';
は no feature qw(indirect);
でも動作して、これは「よく使われるパターンなので例外なのではないか?」と書いていました。
ただ、改めてperldocのprint
を見ると、print FILEHANDLE
やprint FILEHANDLE LIST
という構文で、「一段階の間接指定が行なえ」る、と書かれていることに気付きました。
…なので、「print FILEHANDLE LIST」は間接オブジェクト記法ではなくてprint
関数の1つの構文であり、よって先の記事の記述は、「よく使われるパターンなので例外」ではなくて、「そもそもそういう構文なので、関節オブジェクト記法が使えなくなっても、引き続き利用できる」、というのが正しい説明になりそうです。
もしかしたら(先の記事を読んだ方々も)とっくの昔に知っていた内容かもしれませんが、自分は最近までずっと勘違いをしていたので、Perl Advent Calendar 2024という機会を使って訂正の記事を書かせていただいた次第です。
*1:26日に公開されているように見えるのはご容赦ください…