Как сравнить вложенные хэши - PullRequest
0 голосов
/ 16 мая 2019

Я пытаюсь сравнить данные в хэше, чтобы найти различия. Мой хэш:

$VAR1 = {
10.200.40.10 => {
                5678903  => { 
                                'status' => 'ACTIVE',
                                'age'    => '20'
                            }
                8234234  => {
                                'status' => 'NOT ACTIVE',
                                'age'    => '23'
                            }
                }        
10.200.40.11 => {        
                5678903  => { 
                                'status' => 'NOT ACTIVE',
                                'age'    => '20'
                            }
                8234234  => {
                                'status' => 'NOT ACTIVE',
                                'age'    => '23'
                            }
                }        
10.200.40.12 => {        
                5678903  => { 
                                'status' => 'NOT ACTIVE',
                                'age'    => '21'
                            }
                8234234  => {
                                'status' => 'ACTIVE',
                                'age'    => '23'
                            }
                }
}

Я хотел бы проверить, имеет ли один и тот же пользователь, например, с идентификатором 5678903, одинаковые значения статуса и возраста на каждом сервере. Должен ли я разделить его на три отдельных хэша?

Спасибо за все предложения!

1 Ответ

1 голос
/ 16 мая 2019

Вот пример того, как вы можете сравнить значения для данного пользователя в подхешах. Предполагая, что ваш хэш называется $info:

use List::Util qw(uniq);

my $info = { ... };  # Set up the hash here
my $user = "5678903";
my $status = get_user_value( $info, 'status', $user );
my $age = get_user_value( $info, 'age', $user );

if ( ((uniq @$status) == 1) && ((uniq @$age) == 1) ) {
    say "Same status and age";
}
else {
    say "Not same status and age";
}

sub get_user_value {
    my ( $info, $key, $user ) = @_;

    my @values;
    for my $server (keys %$info) {
        if (exists $info->{$server}{$user}) {
            push @values, $info->{$server}{$user}{$key}
              if exists $info->{$server}{$user}{$key};
        }
    }
    return \@values;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...