Perl の最適化のすべてを示しているのだろうか、-MO=Deparse
なぜこれが Perl 5.10 で折りたたまれていないのだろうか?
$ perl -MO=Deparse -e'[qw/foo bar baz/]->[0]'
['foo', 'bar', 'baz']->[0];
-e syntax OK
IRC の何人かはO=Deparse
、それがすべてを示しているわけではないかもしれないと考えていましたが、一定の折り畳みを示していることは確かです。
$ perl -MO=Deparse -e'use constant "foo" => "bar"; foo'
use constant ('foo', 'bar');
'???';
-e syntax OK
定数サブを明示的に記述しても同じ結果になります。予測可能ではありますが、 のドキュメントでは定数配列ではなく定数リストconstant.pm
を作成していることも興味深い点です。これはスカラー定数のように折りたたまれていないだけでなく、呼び出しごとに新しい配列を作成するオーバーヘッドが必要になると思います。
$ perl -MO=Deparse -e'use constant foo => qw/foo bar baz/; (foo)[0]'
use constant ('foo', ('foo', 'bar', 'baz'));
(foo)[0];
-e syntax OK
私が到達できる唯一の結論は-MO=Deparse
、すべての折り畳みを示すことであり、定数配列はPerlで最適化されていないだけですか? そうですか?技術的な理由はありますか?