Как в Perl передать функцию в качестве аргумента другой функции?

Я написал следующий Perl-класс:

package Menu;
use strict;

my @MENU_ITEMS;
my $HEADER = "Pick one of the options below\n";
my $INPUT_REQUEST = "Type your selection: ";

sub new {
    my $self = {};
   $self->{ITEM}   = undef;
   $self->{HEADER} = undef;
   $self->{INPUT_REQUEST} = undef;
   bless($self);
   return $self;
}

sub setHeader {
    my $self = shift;
    if(@_) { $self->{HEADER} = shift }
    $HEADER = $self->{HEADER}."\n";
}

sub setInputRequest {
    my $self = shift;
    if(@_) { $self->{INPUT_REQUEST} = shift }
    $INPUT_REQUEST = $self->{INPUT_REQUEST}." ";
}

sub addItem {
    my $self = shift;
    if(@_) { $self->{ITEM} = shift }
    push(@MENU_ITEMS, $self->{ITEM}); 
    }

sub getMenu {
    my $formatted_menu .= $HEADER;
    my $it=1;
    foreach(@MENU_ITEMS) {
        $formatted_menu.=$it.". ".$_."\n";
        $it++
      }
    $formatted_menu.=$INPUT_REQUEST;
    return $formatted_menu;
}
1;

Если я вызову следующий perl-скрипт:

#!/usr/bin/perl
use strict;
use Menu;

my $menu = Menu->new();
$menu->addItem("First Option");
$menu->addItem("Second Option");
print $menu->getMenu;

Я получу следующий вывод:

Pick one of the options below
1. First Option
2. Second Option
Type your selection:

Я хотел бы изменить данный класс таким образом, чтобы Я могу передать второй аргумент методу addItem()

примерно так: $menu->addItem("Первый вариант", &firstOptionFunction());

и тогда и только тогда, когда выбранFirst Option, выполняется $firstOptionFunction.

Есть ли способ добиться такого поведения в Perl? Спасибо!

6
задан ILikeTacos 9 May 2012 в 20:23
поделиться