Je viens de commencer à en apprendre davantage sur tie. J'ai une classe nommée lien que je voudrais faire la chose suivante:Comment puis-je appeler des méthodes sur une variable liée?
- si tiré par les cheveux, retourner l'adresse
- du lien si, mémorisez la nouvelle adresse
- être en mesure d'appeler des méthodes sur elle
jusqu'à présent, mon code est:
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;
Et le code que je utilise pour vérifier la fonctionnalité est:
use Link;
tie my $var,"Link","http://somesite.com";
$var->print_method;
Lorsque couru, le script se terminera avec l'erreur suivante: Impossible d'appeler la méthode « print_method » sans référence de colis ou objet à la ligne de tietest.pl 4..
Si je comprends bien son message, $var->print_method
décide de la ficelle sur laquelle la méthode print_method
est appelée. Comment pourrais-je bénéficier de la cravate, mais aussi utiliser la variable comme un objet?
EDIT: après avoir expérimenté un peu, j'ai découvert que si je retourne $ self sur fetch, je peux appeler les méthodes, cependant, fetch ne retournera pas l'adresse.
EDIT 2: les moines perl m'ont fourni la solution: liée. tied renvoie une référence à l'objet VARIABLE. En combinant mes méthodes et ma méthode, je peux accomplir tout ce que je voulais.
+1 aucune raison de lier si tout ce que vous voulez faire est de stringifier. – Axeman
ouais, mais en lui affectant, n'aura pas l'effet que je cherche. Est ce que j'ai demandé impossible? – Geo