Прекратить создание постороннего анонимного массива, убрав квадратные скобки
$actions[stInit] = sub{logState("Initial state entered",2) };
Затем вы можете вызвать действие с помощью
$actions[stInit]();
Если у вас есть действие, сохраненное в переменной, например
my $action = $actions[$actionID];
тогда вам понадобится немного больше синтаксиса, чтобы он действительно выполнял вызов
$action->();
Опять же, вы можете просто использовать хеш вместо массива
my %actions = (
stInit => sub { logState("Initial state entered",2) },
stHeader => sub { logState("Header state entered",2) },
stSalesHeader => sub { logState("Sales header state entered",2) },
stCatagory => sub { logState("Category state entered",2) },
stData => sub { logState("Data state entered",2) },
);
, который избавит вас от необходимости устанавливать константы сверху.Затем вы можете вызвать действия с помощью
$actions{$state}();