Мне интересно, -MO=Deparse
покажет вам все оптимизации Perl, и почему это не складывается в Perl 5.10?Как работает O = Deparse, а Perl имеет и складывает постоянные массивы?
$ 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? Это так? Есть ли для этого техническая причина?
Я все еще смущен, почему я забираю это для этого? Кто-то бросит мне линию. Это потому, что вопрос слишком эзотеричен? Вы считаете, что это повлечет за собой большую работу за любую прибыль? Я просто спрашивал, можно ли это сделать, и почему это не сделано. [Главный ответ] (http://stackoverflow.com/questions/3561210/how-does-odeparse-work-and-does-perl-have-and-fold-constant-arrays/3561323#3561323), похоже, проходит те же вопросы, о которых я спрашиваю. (1) Предположим, что это невозможно по техническим причинам (2), тогда предположите, что это просто не сделано, (3) затем предположите, что это не сделано, потому что это не имеет большого значения. –