www.farid-hajji.net banner

Farid Hajji

Perl: Einführung, Anwendungen, Referenz (2/e) [Support-Site]

Farid Hajji: Perl - Einführung, Anwendungen, Referenz
2., aktualisierte und erweiterte Auflage
Addison-Wesley Longman, ISBN 3-8273-1535-2

Beispielprogramm

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
FreeBSD Logo