Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Perl: Общие вопросы > Разыменование и локализация |
Автор: tishaishii 8.9.2018, 16:21 | ||||
Давно связывался с этой темой. Помню, кажется, в Perl 5.8 можно было разыменовывать переменные my. Сейчас сумел добиться разыменования только глобальных переменных и local:
Если выполнить`perl -MO=Deparse,-P 1.pl`, то на выходе получим:
Тот же эффект есть при последовательном объявлении переменных с помощью трёх операторов local. Объясните, почему $b можно объявить без указания пакета, а $c и $d обязательно с указанием пакета? |
Автор: starikanisbackbaby 8.9.2018, 16:56 |
Очень просто. В маршрутизации локальных пакетов в ядре компилятора Perl определяется двусторонними переменными 3-го уровня, входящие в изолированные паки дополнительных интеграций баз компилятора. Соответственно в данном случае непосредственно операторы local работают по данной схеме. |
Автор: tishaishii 9.9.2018, 06:20 | ||||||
А что если, по вопросу? Если не понятно, то почему-то нельзя объявить
Ещё раз вопрос. Чем провинились c и d, если для $b можно использовать текущий пакет? |
Автор: arto 10.9.2018, 13:13 |
$b -- спецпеременная |
Автор: tishaishii 12.9.2018, 19:34 |
>> $b -- спецпеременная Вы правы. Проверил: "local($e, $main::c, $main::d) = ('a', 'e', 'c');". Выводит ошибку: "Global symbol "$e" requires explicit package name (did you forget to declare "my $e"?)". Вот это ...здец. Нешто, до сих пор в Perl не разобрались с локализацией? Ну, используются какие-то $a и $b в sort, так я всегда думал, они дальше кода в sort не идут. Мдааа. Этот промах - источник ошибок. |
Автор: arto 19.9.2018, 12:45 |
они много где могут использоваться, на то они и специальные |