我编写了一个函数,函数调用按预期工作,当我进行函数调用时,我得到了所需的输出。但是,我想通过对其进行一些更改来增强它。现在,该函数将'ip'
和'service names'
作为参数。
增强:1)当我进行函数调用并且如果我没有传递任何服务作为参数时,我希望函数将所有服务作为参数单独使用 共有5项服务。比如说service1,service2,service3,service 6,service8。(这些只是样本名称。它可以是任何东西)。那么我需要对函数进行哪些更改以确保如果服务不作为参数传递,则该函数必须将所有服务作为参数。
例如函数调用:
$self->{'status_of_services'} = $self->{'services_obj'}->health_check('ip')
因此,当进行上述函数调用时,所有函数必须将所有服务作为参数
增强.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
答案 0 :(得分:0)
您只需要检查数组引用是否已定义,如果没有,则默认使用值,因此您可以编写
sub health_check{
my ($self, $ip, $services) = @_;
my @services;
if ( $services ) {
@services = @$services;
}
else {
@services = qw/ service1 service2 service3 service6 service8 /;
}
...
}
但是您确定要传递数组引用吗?只要它是传递参数的 last 部分,您就可以使用裸列表。你可以通过在$ip
参数之后分配一个数组来做到这一点,如果它是空的则默认它,就像这样
sub health_check{
my ($self, $ip, @services) = @_;
unless ( @services ) {
@services qw/ service1 service2 service3 service6 service8 /;
}
...
}
你可以这样称呼它
$self->{'services_obj'}->health_check('ip', 'service1', 'service2');
或
$self->{'services_obj'}->health_check('ip');