Я хотел бы знать, как избежать ошибки «Нечетное число параметров для новой()» по следующему коду (упрощенный). Код работает только для первой итерации.«SOLVED» - ошибка InfluxDB «Нечетное число параметров для new()» при запуске в цикле
#!/usr/bin/perl
use InfluxDB;
for (;;) {
load1();
sleep 5;
}
sub load1 {
my $ix = InfluxDB->new(host => '192.168.0.93', port => 8086, username => 'root', password => 'root', database => 'test');
## do some stuffs ...
}
Я попытался исследование по этому вопросу, но я не могу найти способ использовать сдвиг или благословлять функции для решения этой проблемы.
Я отредактировал модуль InfluxDB для печати переданных параметров. Это то, что я обнаружил;
Для первой итерации:
Mouse::Meta::Class::__ANON__::2=HASH(0x2359398)
host
192.168.0.93
port
8086
username
root
password
root
database
test_database
Для второй итерации:
Mouse::Meta::Class::__ANON__::6=HASH(0x2359398)
192.168.0.93
port
8086
username
root
password
root
database
test_database
Так как мы видим, на второй итерации нет "хозяина". Я когда-то видел это поведение при вызове функции new с помощью :: (например, InfluxDB :: new()) вместо -> (InfluxDB-> new).
Чтобы решить ближайшую проблему, вы можете переместить декларацию '$ ix' за пределы функции, чтобы она вызывалась только один раз. – AKHolland
Я пробовал это вчера, и у меня получился тот же результат. – Myombo
Это ошибка, и теперь она исправлена (см. Мой ответ ниже). –