Я написал функцию, и вызов функции работает как ожидалось, и я получаю желаемый результат, когда я вызываю вызов функции. Однако я хотел бы улучшить его, сделав пару изменений. На данный момент функция принимает в качестве аргументов 'ip'
и 'service names'
.Perl: Передача массивов в качестве аргументов
Усовершенствование: 1) Когда я делаю вызов функции, и если я не передаю какие-либо службы в качестве аргументов, я хочу, чтобы функция принимала все службы в качестве аргументов сама по себе Имеется всего 5 служб. например, service1, service2, service3, service 6, service8. (Это всего лишь примеры names.it могут быть любыми). Итак, каково изменение, которое мне нужно сделать для функции, чтобы гарантировать, что если службы не передаются в качестве аргументов, функция должна принимать все службы в качестве аргументов.
Например вызов функции:
$self->{'status_of_services'} = $self->{'services_obj'}->health_check('ip')
Таким образом, когда вышеуказанная вызов функции производится все функции должны принимать все услуги в качестве аргументов
Enhancement.2) пользователь хочет передать один или два вида услуг, как аргументы в вызове функции. в настоящее время я храню их в массиве. например @services = ('service1','service2','service3')
. Я не хочу хранить их в массиве. Я хочу передать службы как аргументы, как показано ниже. Любые предложения, пожалуйста.
eg : $self->{'status_of_services'} = $self->{'services_obj'}->health_check('ip', [service1 ,service2]);
Функция:
sub health_check{
my ($self, $ip, @service_name) = @_;
$self->{'health_checks_obj'} = ServiceManager->new(ip => $ip);
$self->{'services_status'} = $self->{'health_checks_obj'}->isRunning({service => @service_name});
sleep(5);
if (not $self->{'services_status'}) {
$self->{'health_checks_obj'}->start({service => @service_name , timeout => '30'});
sleep (3);
}
return 1 ;
}
Вызов функции:
my @services = ('service1', 'service2', 'service3','service4','service5');
$self->{'status_of_services'} = $self->{'services_obj'}->health_check('ip', @services);
INFO (' Health check result is : ' . $self->{'status_of_services'});
Выход:
Health check result is : 1
Эти значения разделяются запятой. услуги qw/service1 сервис2 сервис3 сервис6 сервис8 /; } – user3587025
Это так, как я их написал. 'qw/service1 service2 service3 service6 service8 /' такой же, как '('service1', 'service2', 'service3', 'service6', 'service8')', но гораздо приятнее вводить и читать. Вы также можете вызвать свой метод как «health_check (qw/ip service1 service2 /)» – Borodin
Я получаю следующую ошибку. Нечетное количество элементов в анонимном хэше на странице Services.pm 126 – user3587025