Ich habe gerade erst begonnen, etwas über Krawatte . Ich habe eine Klasse mit dem Namen Link, mit der ich Folgendes tun möchte:
- wenn abgerufen, Rückgabe der Adresse des Links
- falls gespeichert, die neue Adresse speichern
- in der Lage sein, Methoden aufzurufen
Bis jetzt ist mein Code :
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;
Und der Code, den ich verwende, um die Funktionalität zu überprüfen, lautet:
use Link;
tie my $var,"Link","http://somesite.com";
$var->print_method;
Wenn es ausgeführt wird, bricht das Skript mit der folgenden Fehlermeldung ab: Die Methode "print_method" kann nicht ohne Paket- oder Objektreferenz in tietest.pl Zeile 4 aufgerufen werden. .
Wenn ich seine Botschaft richtig verstehe, $var->print_method
in eine Zeichenkette auflöst, auf die die Methode print_method
genannt wird. Wie könnte ich von Krawatte profitieren, aber auch die Variable als ein Objekt verwenden?
EDIT: nach dem Experimentieren ein bisschen, fand ich heraus, dass, wenn ich $self auf Fetch zurückgeben, ich die Methoden aufrufen kann, jedoch Fetch wird nicht die Adresse zurückgeben.
EDIT 2: Die Perl-Mönche haben mir die Lösung geliefert: gebunden . tied gibt einen Verweis auf das Objekt VARIABLE zurück.
Durch die Kombination mit meinen Methoden, kann ich alles erreichen, was ich wollte.