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

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