Невозможно использовать строку ("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};