我有一個陣列和哈希。我只想檢查它們是否都是空的。
我發現以下兩種方法來檢查這一點。任何更足夠的建議。
#!/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";
}
這里的情況是,要么兩者都是空的,要么都有一些值。
uj5u.com熱心網友回復:
要查找哈希或陣列是否為空,
- Hash empty-ness :
(%hash)和(keys %hash),當在布爾背景關系中使用時,在內部同樣優化,并且從 perl 5.28.0 開始。他們都只是檢查哈希的非空值并評估為真值或假值。在此之前,它要復雜得多,并且會隨著版本的變化而變化,也就是說(keys %hash)可能會更快,但這不再是一個問題。 - 陣列空性:
@array在標量背景關系中一直很有效,并且會告訴您陣列是否為空。
uj5u.com熱心網友回復:
大批
@a在標量背景關系中使用。
例子:
say @a ? "not empty" : "empty";
@a
or die( "At least one value is required" );
my $num_elements = @a;
哈希
在標量背景關系中使用%h或。keys( %h )
如果代碼將在舊版本的 Perl 上運行,則需要keys( %hash )因為%h在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。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/485311.html
標籤:perl
