Она называется таблицей диспетчеризации.
my %switchers = (
ViewA => { ViewB => \&SwitchViewA_to_viewB,
ViewC => \&SwitchViewA_to_viewC, },
ViewB => { ViewA => \&SwitchViewB_to_viewA,
ViewC => \&SwitchViewB_to_viewC, },
ViewC => { ViewA => \&SwitchViewC_to_viewA,
ViewB => \&SwitchViewC_to_viewB, },
);
$switchers{$from}{$to}->()
if $from ne $to;
или
my %switchers = (
"ViewA-ViewB" => \&SwitchViewA_to_viewB,
"ViewA-ViewC" => \&SwitchViewA_to_viewC,
"ViewB-ViewA" => \&SwitchViewB_to_viewA,
"ViewB-ViewC" => \&SwitchViewB_to_viewC,
"ViewC-ViewA" => \&SwitchViewC_to_viewA,
"ViewC-ViewB" => \&SwitchViewC_to_viewB,
);
$switchers{"$from-$to"}->()
if $from ne $to;
Обратите внимание, что вы можете передавать аргументы функции, передавая их в скобках (как обычно).
Если у вас есть 10 представлений, это значит, что у вас есть 90 функций.
Вы уверены, что именно так вы хотите подойти к этой проблеме?Возможно, вам следует рассмотреть подход, который не требует знания предыдущего представления.Возможно, вы можете иметь две функции для просмотра.Один из них вызывается для активации представления, а другой - для его деактивации.
Тогда вам нужно всего лишь 20 функций вместо 90. А для добавления одиннадцатого представления потребуется только 2 функции вместо 20.