Что делает __ ПАКЕТ __-> среднее {нечто}?

Я осуществляю рефакторинг модуль жемчуга в унаследованном коде, и это - функция от модуля:

sub get_user {
    my $user = __PACKAGE__->{user};
    if (!defined $user) {
       # more code
       __PACKAGE__->{user} = $user;
    }
    return $user;
}

Этот модуль компилирует под use strict. И нет никаких определенных переменных пакета. Что делает __PACKAGE__->{user} средний?

19
задан Eugene Yarmash 7 July 2010 в 13:33
поделиться

2 ответа

__ ПАКЕТ __ - имя текущего пакета; ваш код использует его как символическую ссылку на хэш. Итак, если ваш пакет - foo, он устанавливает $ foo :: foo {'user'} . Это довольно странное занятие; Я подозреваю, что это может быть ошибка.

Поскольку это символическая ссылка, ее нельзя допускать строго. Однако похоже, что это так, по крайней мере, когда текущий пакет состоит из нескольких частей (например, Foo :: Bar, а не только Foo). Однако я бы не стал полагаться на то, что эта ошибка останется в силе.

14
ответ дан 30 November 2019 в 05:04
поделиться

__ ПАКЕТ __ - это хэш. Этот синтаксис обращается к ключевому значению.

-5
ответ дан 30 November 2019 в 05:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: