Perl:将数组作为参数传递
Perl : Passing Arrays as arguments
我编写了一个函数,函数调用按预期工作,并且在进行函数调用时得到了所需的输出。但是,我想通过对其进行一些更改来增强它。现在函数接受 'ip'
和 'service names'
作为参数。
增强:1)当我进行函数调用时,如果我没有将任何服务作为参数传递,我希望函数本身将所有服务作为参数
总共有5个服务。例如服务 1、服务 2、服务 3、服务 6、服务 8。(这些只是示例 names.it 可以是任何东西)。那么我需要对函数进行哪些更改以确保如果服务未作为参数传递,函数必须将所有服务作为参数。
例如函数调用:
$self->{'status_of_services'} = $self->{'services_obj'}->health_check('ip')
所以当调用上述函数时,所有函数都必须将所有服务作为参数
Enhancement.2) 用户希望在函数调用中将一个或两个服务作为参数传递。目前我将它们存储在一个数组中。像 @services = ('service1','service2','service3')
一样。我不想将它们存储在 array.instead 中,我想直接将服务作为参数传递,如下所示。有什么建议吗
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
你只需要检查是否定义了数组引用,如果没有则默认使用的值,所以你会写
sub health_check{
my ($self, $ip, $services) = @_;
my @services;
if ( $services ) {
@services = @$services;
}
else {
@services = qw/ service1 service2 service3 service6 service8 /;
}
...
}
但是您确定要传递数组 reference 吗?只要它是您传递的参数的 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');
我编写了一个函数,函数调用按预期工作,并且在进行函数调用时得到了所需的输出。但是,我想通过对其进行一些更改来增强它。现在函数接受 'ip'
和 'service names'
作为参数。
增强:1)当我进行函数调用时,如果我没有将任何服务作为参数传递,我希望函数本身将所有服务作为参数 总共有5个服务。例如服务 1、服务 2、服务 3、服务 6、服务 8。(这些只是示例 names.it 可以是任何东西)。那么我需要对函数进行哪些更改以确保如果服务未作为参数传递,函数必须将所有服务作为参数。
例如函数调用:
$self->{'status_of_services'} = $self->{'services_obj'}->health_check('ip')
所以当调用上述函数时,所有函数都必须将所有服务作为参数
Enhancement.2) 用户希望在函数调用中将一个或两个服务作为参数传递。目前我将它们存储在一个数组中。像 @services = ('service1','service2','service3')
一样。我不想将它们存储在 array.instead 中,我想直接将服务作为参数传递,如下所示。有什么建议吗
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
你只需要检查是否定义了数组引用,如果没有则默认使用的值,所以你会写
sub health_check{
my ($self, $ip, $services) = @_;
my @services;
if ( $services ) {
@services = @$services;
}
else {
@services = qw/ service1 service2 service3 service6 service8 /;
}
...
}
但是您确定要传递数组 reference 吗?只要它是您传递的参数的 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');