Perl foreach中的字符串比较

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地址列表上的软件信息。 程序按预期打印在所有IP上运行的软件版本

现在,我想测试运行在所有IP上的软件是否相同?我该怎么做

子测试检查所有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
视为普通的哈希引用。