У меня есть следующее условие:
if ($self->path ne 'contact_us' && !grep { $status == $_ } 2, 3, 8) {
И выдает это предупреждение:
Использование неинициализированного значения в числовом gt (>)
Конечно, на поверхности вообще нет числовых gt.$ self-> path является средством доступа к атрибутам Moose, так что единственная магия под капотом будет исходить из этого.Но я не могу понять, как это могло бы сделать числовое сравнение gt, тем более что path
определяется следующим образом:
has 'path' => (is => 'rw', isa => 'Str');
Есть идеи о том, как выдается это предупреждение?Я использую Perl v5.8.8, созданный для i386-linux-thread-multi, если это имеет значение в этом случае.
Обновление : еще более таинственным образом я переписал условное выражение какследует:
my $cond1 = $self->path ne 'contact_us';
my $cond2 = !grep { $status == $_ } 2, 3, 8;
if ($cond1 && $cond2) {
И это третья строка, которая выдает предупреждение.Трассировка стека Carp::Always
недостаточно информативна.Некоторое дальнейшее раскрытие, поскольку сейчас я чувствую себя совершенно неосведомленным: базовый файл - это скрипт FastCGI, вызываемый модулем Apache mod_fcgi.
Последнее обновление: $status
было установлено с помощьювызов метода, найденного в другом модуле (My::Session
).Вот строка, генерирующая предупреждение в методе этого модуля (обратите внимание на ошибочный >
):
my $disputes => dbh('b')->selectrow_hashref($query);
Что меня смущает, так это то, что предупреждение не ссылается на модуль, содержащий ошибочную строку (оно ссылается намодуль, вызывающий метод, My::Page
).Вот полный вывод из Carp::Always
;совершенно не упоминается My::Session
:
[среда, 23 февраля, 17:44:29 2011] [предупреждать] [клиент --- .---. 94.159] mod_fcgid: stderr: Использование неинициализированного значения в числовом gt (>) в строке /path/to/My/Page.pm 65, реферер: https://testserver.domain.tld/help
[Ср. 23 февраля 17:44:29 2011] [warn][client ---.---. 94.159] mod_fcgid: stderr: \ tPage :: BUILD ('My :: Page :: Help = HASH (0xa7ce788)', 'HASH (0xa327904)') вызывается в / usr / lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/Class/MOP/Method.pm строка 123, реферер: https://testserver.domain.tld/help
[ср. 23 февраля, 17:44:29 2011] [warn] [клиент --- .---. 94.159] mod_fcgid: stderr: \ tClass :: MOP :: Method :: execute ('Moose :: Meta :: Method = HASH (0x9fa357c)', 'My :: Page:: Help = HASH (0xa7ce788) ',' HASH (0xa327904) ') вызывается по адресу /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/Moose/Object.pm строка 57, реферер:https://testserver.domain.tld/help
[Ср 23 Фев 17:44:29 2011] [warn] [client ---.---. 94.159] mod_fcgid: stderr: \ tMoose :: Object :: BUI, referer:https://testserver.domain.tld/help
[Ср. 23 февраля 17:44:29 2011] [предупредить] [клиент ---.---. 94.159] mod_fcgid: stderr: LDALL ('My :: Page :: Help = HASH (0xa7ce788)', 'HASH (0xa327904)'), вызываемый по адресу /usr/lib/perl5/site_perl/5.8.8 / i386-linux-thread-multi / Moose / Meta / Class.pm строка 278, реферер: https://testserver.domain.tld/help
[среда, 23 февраля, 17:44:29 2011] [предупреждение] [клиент ---.---. 94.159] mod_fcgid: stderr: \ tMoose :: Meta :: Class :: new_object ('Class :: MOP :: Class :: ANON :: SERIAL :: 1 = HASH (0xa3397c8) ',' HASH (0xa327904) ') вызывается в /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/Moose/Object.pm строка 26, реферер: https://testserver.domain.tld/help
[Ср. 23 февраля 17:44:29 2011] [предупреждение] [клиент ---.---. 94.159] mod_fcgid: stderr: \ tMoose :: Object :: new ('My :: Page :: Help', 'HASH (0xa339d38)') вызывается в сгенерированном методе (неизвестное происхождение), строка 3, реферер: https://testserver.domain.tld/help
[Ср. 23 февраля 17:44:29 2011] [warn] [client ---.---. 94.159] mod_fcgid: stderr: \ tMy :: Page :: new ('My :: Page :: Suppo, реферер: https://testserver.domain.tld/help
[Ср. 23 февраля 17:44:29 2011][warn] [клиент --- .---. 94.159] mod_fcgid: stderr: rt ',' HASH (0xa339d38) ') вызывается в / path /в / My.pm, строка 44, реферер: https://testserver.domain.tld/help
[ср. 23 февраля 17:44:29 2011] [warn] [client ---.---. 94.159] mod_fcgid: stderr: \tMy :: start () вызывается в index.fcgi строке 9, реферер: https://testserver.domain.tld/help