В одном из учебников Perl в теме «Прегрузка» встречаю такой код:
package PsychoHash;
use overload ‘%{}’ => \\&as_hash;
sub as_hash {
my ($x) = shift;
return { @$x };
}
sub new {
my $class = shift;
return bless [ @_ ] => $class;
}
$critter = new PsychoHash( height => 72, weight => 365, type => “camel” );
print $critter->{weight}; #prints 365
Пример показывает реализацию объекта как анонимного массива, разрешающего ссылку через хеш. Я не пойму что происходит в обработчике as_hash:
1) my ($x) присваевается инвокант объекта $critter (в качестве первого аргумента любого объекта);
2) далее возвращается анонимный хеш значениями которого являются значения массива @x.
3) и как из всего этого print выводит число 365, неясно.
То есть я догадываюсь, что {weight} является ключом в анонимном хеше, который должен там вернуть свое значение, которым является 365. Но как это конкретно происходит в as_hash не пойму. Короче, что присваевается ($x) и что возвращает { @$x }.
Вроде все.
Спасибо.