Я хотел бы знать, как избежать ошибки «Нечетное количество параметров для 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
за пределы функции, чтобы оно вызывалось только один раз. - person AKHolland   schedule 06.05.2015