如何测试散列的所有值是否等于给定值

ado*_*ado 1 perl

我正在处理像哈希这样的哈希:

my %hash1 = (
  key1 => 0,
  key2 => 1,
  key3 => 0,
);
Run Code Online (Sandbox Code Playgroud)

如果所有值(不仅仅是一个值)的%hash1值为1,我想做点什么.

怎么写呢?

作为参考,我可以写:

for $key ( keys %hash1 ) {
   if ( $hash1{$key} == 1 ){
    #do something
   }
}
Run Code Online (Sandbox Code Playgroud)

这是错误的,因为即使一个键的值等于1,#do something代码的一部分也会运行.我写的代码显然会做一些事情,如果至少有一个键等于1.这样的东西会很好:

for $key ( keys %hash1 ) {
   if ( exists( $hash1{$key} == 1 ) ){
    #do something
   }
}
Run Code Online (Sandbox Code Playgroud)

Tot*_*oto 6

我会做:

my $not_all_ones = grep { $_ != 1 } values %hash1;
Run Code Online (Sandbox Code Playgroud)