Ваша проблема не имеет ничего общего с типом.
Первое, что должен усвоить каждый Perl кодер, это то, что следующие два утверждения должны появляться в верхней части каждого скрипта.
use strict;
use warnings;
Эти два оператора фиксируют множество ошибок, одна из которых является причиной вашей проблемы.
Если вы посмотрите на свой блок eval
eval {
local $SIG{ALRM} = sub { };
alarm 3;
#$client->GET("/redfish/v1/Systems/1/Bios/");
my $bios_current = $client->GET("/redfish/v1/Systems/1/Bios/");
print Dumper $bios_current->responseCode;
alarm 0;
};
Вы увидите, что переменная $ bios_current вводится с модификатором my
, который ограничивает время жизни переменной до текущей области, в данном случае это блок eval.
Таким образом, к моменту выполнения оператора if переменная больше не существует и Perl услужливо создает новый пустой для вас, Perl затем пытается вызвать responseCode () для пустой переменной, это завершается ошибкой и, как правило, завершает программу, однако в этот момент вы находитесь внутри блока try (), поэтому вместо при отображении ошибки код переходит к блоку catch c.