Невозможно использовать строку ("1") в качестве ссылки на подпрограмму, когда используются "строгие ссылки"

Я знаю, что это дубликат " Не могу использовать строку" ("1") в качестве ссылки на подпрограмму, когда используются "строгие ссылки", но я не могу понять, в чем заключается моя проблема с вызовом таблицы диспетчеризации. Кажется, что код выполняется, но в журнале появляется следующая ошибка: Can't use string ("1") as a subroutine ref while "strict refs" in use at C:/filepath/file.pl line 15.

#! C:\strawberry\perl\bin\perl

use strict;
use warnings;
use Custom::MyModule;
use CGI ':standard'; 

my $dispatch_table = {
      getLRFiles => \&Custom::MyModule::getLRFiles,
      imageMod => \&Custom::MyModule::imageMod,
      # More functions
  };

my $perl_function = param("perl_function");
($dispatch_table->{$perl_function}->(\@ARGV) || sub {})->(); # Error occurs on this line

Я не уверен, что это как-то связано с тем, что я использую пользовательский модуль, и, возможно, это что-то глупое, так как я не очень хорошо знаком с Perl, но любая помощь будет принята!

1 ответ

Решение
($dispatch_table->{$perl_function}->(\@ARGV) || sub {})->();

это то же самое, что

my $x = $dispatch_table->{$perl_function}->(\@ARGV);
($x || sub {})->(); # $x is probably not code ref

Пытаться,

($dispatch_table->{$perl_function} || sub {})->(\@ARGV);

или возможно

$_ and $_->(\@ARGV) for $dispatch_table->{$perl_function};
Другие вопросы по тегам