检查数组和哈希是否为空

Check Array and Hash is Empty or Not

我有一个数组和散列。我只是想看看它们是否都为空

我在下面找到了两种检查方法。任何更足够的建议。

#!/usr/bin/perl

use strict; use warnings;
use Data::Dumper;

my @a = qw/a b c/; 
print Dumper(\@a);

my %b = (1 => "Hi");
print Dumper(\%b);

@a = ();
%b = ();

#Method 1
if(!@a && !%b){
    print "Empty\n";
} else {
    print "Not empty\n";
}

#Method 2
if(!scalar @a && !scalar keys %b){
    print "Empty\n";
} else {
    print "Not empty\n";
}

这里的情况是,要么两者都是 Empty,要么两者都有一些值。

查找散列或数组是否为空,

  • Hash empty-ness(%hash)(keys %hash),当在布尔上下文中使用时,在内部同样优化,并且自此从 perl 5.28.0 开始。他们都只是检查 non-emptiness 的散列并评估为 true 或 false 值。在此之前,它要复杂得多,并且跨版本发生变化,也就是说 (keys %hash) 可能 更快,但这不再是问题。
  • 数组empty-ness: @array在标量上下文中一直是高效的,并且会告诉你数组是否为空。

数组

在标量上下文中使用 @a

示例:

say @a ? "not empty" : "empty";
@a 
   or die( "At least one value is required" );
my $num_elements = @a;

哈希

在标量上下文中使用 %hkeys( %h )

如果代码在旧版本的 Perl 上是 运行,您需要 keys( %hash ),因为 %hinefficient before 5.26

示例:

say %h ? "not empty" : "empty";   # Slower before 5.26
say keys( %h ) ? "not empty" : "empty";
%h                                # Slower before 5.26
   or die( "At least one element is required" );
keys( %h )
   or die( "At least one element is required" );
my $has_elements = %h;            # Slower before 5.26
my $num_elements = %h;            # 5.26+
my $num_elements = keys( %h );

请注意 !@a!scalar @a 相同 因为 ! 已经强加了标量上下文。 !scalar keys %b!keys %b.

也是如此