Похоже, вы ищете таблицу отправки
use warnings;
use strict;
use feature 'say';
my %option = (
o1 => sub { say "Code for func1, to run for key 'o1'"; },
o2 => sub { say "Code that should run for input 'o2'"; },
#...
);
my $input = <STDIN>;
chomp $input;
$option{$input}->(); # run code in reference associated with $input's value
Здесь sub { ... }
определяет анонимную подпрограмму и возвращает ссылку на код . Будучи ссылкой, это скалярный (однозначный) тип, поэтому его можно использовать как значение ha sh.
Поэтому, когда пользователь вводит o1
, запускается код в ссылке (sub { ... }
), который является значением для ключа o1
в га sh, то есть $option{o1}
.
Синтаксис для запуска ссылки на код очень похож на разыменование массива или ссылки ha sh
$ar->[0] # dereference array reference, for the first element
$hr->{key} # dereference hash reference, for value for key 'key'
$cr->(LIST) # dereference code reference, to run with arguments in LIST
Скалярная переменная $cr
здесь будет иметь ссылку на код, my $cr = sub { ... }
.