Farid Hajji: Perl - Einführung, Anwendungen, Referenz
2., aktualisierte und erweiterte Auflage
Addison-Wesley Longman, ISBN 3-8273-1535-2
autoload3.pl
#!/usr/local/bin/perl -w
# autoload3.pl -- Laden von Funktionen aus einem persistenten Hash
# Verwendet AUTOLOAD(), tie() und eval()
use SDBM_File;
use Fcntl;
BEGIN {
tie (%auto, 'SDBM_File', "func.defs", O_RDWR|O_CREAT, 0666)
or die "can't tie to function hash: $!\n";
}
END { untie %auto; }
sub AUTOLOAD {
$AUTOLOAD =~ s/.*:://; # Entferne den Packagenamen
if (defined $auto{$AUTOLOAD}) {
# Funktionsdefinition: Ist schon Funktionshash vorhanden?
print "AUTOLOAD(): Loading $AUTOLOAD...\n" if defined $^W;
eval $auto{$AUTOLOAD}; # Definition kompilieren
&{$AUTOLOAD}(@_); # Funktion aufrufen
}
else {
# Funktionsdefinition unbekannt: Ausnahme ausloesen
die "AUTOLOAD(): couldn't find $AUTOLOAD in function hash!\n";
}
}
# Bereiten wir einige Funktionen vor, die dynamisch geladen werden.
# Das koennte auch aus einem anderen Programm heraus geschehen...
$auto{'add'} = 'sub add { return $_[0] + $_[1]; }';
$auto{'mul'} = 'sub mul { return $_[0] * $_[1]; }';
$auto{'magic'} = 'sub magic { return "xyzzy"; }';
# Nun rufen wir diese Funktionen auf:
$res = add(11,22); # Einlesen und evaluieren
print "add(11,22) == $res\n";
$res = mul(10,20); # Einlesen und evaluieren
print "mul(10,20) == $res\n";
$res = add(33,44); # Funktion schon da, direkter Aufruf!
print "add(33,44) == $res\n";
print magic(), "\n"; # Einlesen und evaluieren
[Prev] [Up] [Relevant Chapter] [Next]
[Alte Quelle]
| Last modified: $Date: 2006/05/18 12:55:51 $ FH. Search :: Sitemap :: Disclaimer :: Copyright :: Privacy |
|