Farid Hajji: Perl - Einführung, Anwendungen, Referenz
2., aktualisierte und erweiterte Auflage
Addison-Wesley Longman, ISBN 3-8273-1535-2
closure5.pl
#!/usr/local/bin/perl -w
# closure5.pl -- Smarte Callbacks mit Closures. Simuliert GUI
sub make_handler {
my $button_name = shift; # Closure fuer smarte Callbacks
return sub { # Das ist ein smarte Callback
print "Button $button_name pressed\n" if $^W;
if ($button_name eq "Ok") { print "Okay, okay!\n"; }
elsif ($button_name eq "Cancel") { return; }
elsif ($button_name eq "Abort") { die "Aborted!\n"; }
else { print "Normal handling...\n"; }
}
}
sub event_handler {
my %dispatcher = @_; # Hmmm... noch eine Closure!
sub prompt { print shift(); my $x=<STDIN>; chomp $x; return $x; }
return sub { # Die Eventschleife
while (defined ($event = prompt("Button to press: "))) {
if (not exists $dispatcher{$event}) {
print STDERR "Button $event not registered\n";
print STDERR "Registered are: ",
join(" ", sort keys %dispatcher), "\n";
next;
}
&{$dispatcher{$event}}(); # smartes Callback aufrufen!
}
}
}
# Wir brauchen eine Eventschleife mit einigen Buttons:
$evloop = event_handler(
Ok => make_handler("Ok"), # Ok-Button registrieren
Cancel => make_handler("Cancel"), # Cancel-Button registrieren
Abort => make_handler("Abort"), # Abort-Button registrieren
Magic => make_handler("Magic") # Irgendein anderer Button
);
&$evloop(); # Eventschleife starten
[Prev] [Up] [Relevant Chapter] [Next]
[Alte Quelle]
| Last modified: $Date: 2006/05/18 12:55:54 $ FH. Search :: Sitemap :: Disclaimer :: Copyright :: Privacy |
|