Это потому, что присвоение @ISA
выполняется во время выполнения, поэтому после попытки вызова метода.
Вы можете заставить его работать, окружив BEGIN
, переместив его во время компиляции:
BEGIN { our @ISA = qw( C::Main ) }
или вы можете сделать
use base qw( C::Main );
, что также делается во время компиляции.Оба варианта решают вашу проблему.