Я только начал изучать галстук. У меня есть класс с именем Link, который я хотел бы сделать следующим образом:
- если получено, вернуть адрес ссылки
- если сохранено, сохраните новый адрес
- иметь возможность вызывать методы на нем
Пока что мой код:
package Link;
sub FETCH {
my $this = shift;
return $this->{"site"};
}
sub STORE {
my ($self,$site) = @_;
$self->{"site"} = $site;
}
sub print_method {
my $self = shift;
print $self->{"site"};
}
sub TIESCALAR {
my $class = shift;
my $link = shift;
my $this = {};
bless($this,$class);
$this->{"site"} = $link;
return $this;
}
1;
И код, который я использую для проверки функциональности:
use Link;
tie my $var,"Link","http://somesite.com";
$var->print_method;
При запуске сценарий завершится со следующей ошибкой: Невозможно вызвать метод "print_method" без ссылки на пакет или объект в строке 4 tietest.pl..
Если я правильно понимаю его сообщение, $var->print_method
разрешается в некоторую строку, для которой вызывается метод print_method
. Как я могу извлечь выгоду из tie, но при этом использовать переменную как объект?
РЕДАКТИРОВАТЬ: немного поэкспериментировав, я обнаружил, что если я верну $self при выборке, я могу вызвать методы, однако выборка не вернет адрес.
РЕДАКТИРОВАТЬ 2: монахи perl предоставили мне решение: связанный. linked вернет ссылку на объект VARIABLE .
Комбинируя связанные с моими методами, я могу добиться всего, чего хотел.