Мне интересно, -MO=Deparse
показывает вам все оптимизации Perl, и почему это не сворачивается в 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
Тот же результат, если я явно напишу константу sub.Несмотря на предсказуемость, также довольно интересно, что в документации в 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?Это так?Есть ли техническая причина для этого?