Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как хеш копирует свои значения в @_? Что так можно?

1.9K
19 июля 2003 года
Oleg32
17 / / 20.10.2002
Мне вот тут не ясно, как в my $self = { %Fields, @_}; - % Fields клонирует свои значения в @_ Что так можно?
Спасибо.



use Person;
$him = Person->new;
$him->name(“Aragorn”);
$him->race(“Man”);
$him->aliases( [“Strider”, “Estel”, “Elessar”] );

package Person;
use Carp;

my %Fields = (
“Person::name” => “unnamed”,
“Person::race” => “unknown”
“Person::aliases” =>[],
);

#Следущее объявление гарантирует получение собственного автозагрузчика.
use subs qw(name race aliases);

sub new {
my $invocant = shift;
my $class = ref($invocant) || $invocant;
my $self = { %Fields, @_};
bless $self, $class;
return $self;
}

sub AUTOLOAD {
my $self = shift;
# обрабатывать только методы экземпляра, но не класса
croak «$self не является объектом» unless ref($invocant);
my $name = our $AUTOLOAD;
return if $name =~ /::DESTROY$/;
unless (exists $self->{$name}) {
croak “Нет доступа к полю ‘$name’ в $self”;
}
if (@_) { return $self->{$name} = shift }
else { return $self->{$name} }
}
283
21 июля 2003 года
Alone
910 / / 20.11.2002
С чего вы решили что % Fields клонирует свои значения в @_ ?!
my $self = { %Fields, @_}; - создает ссылку на ананимный хеш и сохраняет её в локальной переменной.
%Fields,@_ - возращяет список значений
все не четные значения становятся ключами а четные значением в ананимном хеше...

P.S. насчет корректности использования выражения "ананимный хеш" не уверен
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог