Я осуществляю рефакторинг модуль жемчуга в унаследованном коде, и это - функция от модуля:
sub get_user {
my $user = __PACKAGE__->{user};
if (!defined $user) {
# more code
__PACKAGE__->{user} = $user;
}
return $user;
}
Этот модуль компилирует под use strict
. И нет никаких определенных переменных пакета. Что делает __PACKAGE__->{user}
средний?
__ ПАКЕТ __
- имя текущего пакета; ваш код использует его как символическую ссылку на хэш. Итак, если ваш пакет - foo, он устанавливает $ foo :: foo {'user'}
. Это довольно странное занятие; Я подозреваю, что это может быть ошибка.
Поскольку это символическая ссылка, ее нельзя допускать строго. Однако похоже, что это так, по крайней мере, когда текущий пакет состоит из нескольких частей (например, Foo :: Bar, а не только Foo). Однако я бы не стал полагаться на то, что эта ошибка останется в силе.
__ ПАКЕТ __
- это хэш. Этот синтаксис обращается к ключевому значению.