Проблема в том, что
my (@ctc_rec,$i) = ((),0);
не делает то, что вы думаете, что делает.Это означает то же самое, что
my @ctc_rec = (0);
my $i;
strict
делает то, для чего предназначен, и ловит вашу ошибку.Попробуйте написать:
my @ctc_rec;
my $i = 0;
.Это должно избавить от ошибки.
В этом случае есть еще один способ избавиться от ошибки и одновременно значительно упростить ваш код: используйте selectall_arrayref .
sub get_expected_contacts
{
return $db1->selectall_arrayref(
"SELECT DISTINCT field1, field2, field3 FROM table WHERE field4 = ? AND field5 = ? AND field6 = 'E'",
undef, @_
);
}
Если вы действительно намеренно делали что-то, что было запрещено strict
(но знали, что делали), вы можете отключить strict
локально:
use strict;
# this code is strict
{
no strict;
# some code that is not strict here
}
# strict is back in effect now
Но вы никогда не должныделайте это до тех пор, пока не поймете, на что конкретно жалуется strict
и почему в этом случае это нормально.Также лучше отключить только ту часть strict
, которая вам нужна.Например, вы можете сказать no strict 'refs';
, чтобы разрешить символьные ссылки без отключения других вещей, которые strict
делает.(Примечание: та же техника работает с прагмой предупреждений , которую также следует использовать.)