Perl foreach中的字符串比较
下面的测试是检查IP地址列表上的软件信息。 程序按预期打印在所有IP上运行的软件版本 现在,我想测试运行在所有IP上的软件是否相同?我该怎么做Perl foreach中的字符串比较,perl,perl-module,Perl,Perl Module,下面的测试是检查IP地址列表上的软件信息。 程序按预期打印在所有IP上运行的软件版本 现在,我想测试运行在所有IP上的软件是否相同?我该怎么做 子测试检查所有IP上的软件信息{ 我的($self)=@; $self->{'machine_ip'}=$self->{'queryObj'}->get_machine_ip(); foreach my$ip(@{$self->{'machine\u ip'}}){ $self->{'install_info'}=$self->{'queryObj'}-
子测试检查所有IP上的软件信息{
我的($self)=@;
$self->{'machine_ip'}=$self->{'queryObj'}->get_machine_ip();
foreach my$ip(@{$self->{'machine\u ip'}}){
$self->{'install_info'}=$self->{'queryObj'}->get_install_info($ip);
信息(“%$ip.”的“软件信息”是“%$self->{install_INFO'}”);
}
}
样本输出
20160907T141846信息1.1.1的软件信息为r-2016-08-27-03
20160907T141846信息2.2.2的软件信息为r-2016-08-27-03
20160907T141847信息3.3.3的软件信息为r-2016-08-27-03
4.4.4.4中的20160907T141847信息软件信息为r-2016-08-27-03
这将按您的要求执行
sub check_matching_info {
my ($self) = @_;
my $ips = $self->{queryObj}->get_machine_ip;
my %info;
for my $ip ( @$ips ) {
my $info = $self->{queryObj}->get_install_info($ip);
push @{ $info{$info} }, $ip;
}
print keys %info == 1 ? "All IPs have the same install info" : "IPs have different install info";
}
和往常一样,一切都已经为你准备好了,你只需要找到它。虽然通过
List::Util
可以在core中找到一些宝石,但我们今天想要的不是core,而是List::MoreUtils
use List::MoreUtils ('all') ;
sub check_versions_equal
{
my ($self)= @_ ;
my @vers= map ( $self->{queryObj}->get_install_info($_) }
@{$self->{queryObjs}->get_machine_ip ;}
return true unless @vers ; # empty list case ;
my ($v)= @vers ;
return all { $_ eq $v } @vers ;
}
那么,你考虑过做什么?看起来很直截了当。从第一个版本抓取版本;检查所有其他版本是否相同,打印任何不一致的版本。当然,有一个风险,第一台机器是一个奇怪的版本。您还可以使用每个版本的计数(由版本设置键)创建一个散列,当您完成上述循环时,迭代该新散列的键以报告版本和计数。您还可以使用使用该版本的计算机列表创建一个哈希键控版本。诸如此类。所有好的干净的基本Perl编程乐趣。看起来您正在编写面向对象的软件,在这种情况下,您应该使用访问器方法,而不是将
$self
视为普通的哈希引用。