Здравствуйте.
Мне неясно почему в некоторых конструкторах bless освещает ссылку в пакет задавая ссылку на эту ссылку.
Пример:
Package ShiftString;
use overload
‘>>’ => \\&right_shift,
‘ “” ‘ => sub { ${ $_[0] }};
sub new {
my $class = scift;
my $value = shift;
return bless \\$value => $class;
}
sub right_shift {
my ($x, $y) = @_;
my $value = $$x;
substr($value, -$y) = “”;
return bless \\$value => ref($x);
}
$camel = ShiftString->new(“Camel”);
$ram = $camel >> 2;
print $ram; #Cam
Хотя обычно ссылки освещаются по типу:
package Critter;
sub spawn {
my $self = {};
bless $self, “Critter”;
return $self;
}
$pet = Critter->spawn;
то есть без \\ перед переменой содержащей значение. Почему так?
Обычно это происходит в программах с использованием перегрузки. Это как то связано?
Спасибо