$year
просто отлично, как и (localtime)[5]
.
Проблема в том, что ваш объект по какой-то причине не был инициализирован. А именно, $ self-> birth_year () возвращается неопределенным.
Если вы посмотрите на ваш вывод "у котенка по имени есть в возрасте 2011 года", вы пропустите имя, то, что он ест, и возраст будет 2011 - 0 (или только 2011, если я помню свои таблицы вычитания) , Поскольку undef рассматривается как 0, у вас есть проблемы, о которых нужно позаботиться, прежде чем беспокоиться о расчете возраста.
Кроме того, я запустил ваш код, и вы либо ничего нам не говорите, либо это перефразирует ваш настоящий код. Когда я запустил его, я получил ожидаемые результаты: «У меня есть котенок по имени Бьюти, который ест рыбу в 1997 году в возрасте 14 лет»
Одна из причин, по которой я считаю это, заключается в том, что вы не включили конечный 1;
в Cat.pm
, поэтому он даже не будет компилироваться.