gpt4 book ai didi

perl - 如何确定哈希值中的元素个数是否为奇数?

转载 作者:行者123 更新时间:2023-12-01 22:16:11 25 4
gpt4 key购买 nike

我怎样才能知道这个散列是否有奇数个元素?

my %hash = ( 1, 2, 3, 4, 5 );

好吧,我应该写更多信息。

sub routine {
my ( $first, $hash_ref ) = @_;
if ( $hash_ref refers to a hash with odd numbers of elements ) {
"Second argument refers to a hash with odd numbers of elements.\nFalling back to default values";
$hash_ref = { option1 => 'office', option2 => 34, option3 => 'fast' };
}
...
...
}


routine( [ 'one', 'two', 'three' ], { option1 =>, option2 => undef, option3 => 'fast' );

最佳答案

嗯,我认为这个问题中存在一些术语困惑,需要澄清。

Perl 中的哈希总是具有相同数量的键和值 - 因为它本质上是一个通过键存储某些值的引擎。我的意思是,键值对在这里应该被视为单个元素。 )

但我想这并不是真正的问题。 )我想OP尝试从列表(不是数组 - 差异很微妙,但它仍然存在)构建哈希,并收到警告。

所以重点是检查列表中将分配给哈希的元素数量。它可以像...一样简单地完成

my @list = ( ... there goes a list ... ); 
print @list % 2; # 1 if the list had an odd number of elements, 0 otherwise

请注意,% 运算符将标量上下文强加于列表变量:它简单而优雅。 )

更新 据我所知,问题略有不同。好吧,我们来讨论一下给出的例子,稍微简化一下。

my $anhash = { 
option1 =>,
option2 => undef,
option3 => 'fast'
};

看,=> 只是一个语法糖;这个作业可以很容易地重写为...

my $anhash = { 
'option1', , 'option2', undef, 'option3', 'fast'
};

要点是第一个逗号后的缺失值和 undef 不一样,因为列表(任何列表)在 Perl 中会自动展平。 undef 可以是任何列表的普通元素,但空白将被忽略。

请注意,如果使用包含在引用中的无效哈希来调用过程,那么您关心的警告(如果设置了use warnings)将在调用您的过程之前引发 。因此,无论谁造成了这种情况,都应该自己处理,查看自己的代码:他们说,尽早失败。 )

您想使用命名参数,但为缺少的参数设置一些默认值?使用此技术:

sub test_sub {
my ($args_ref) = @_;
my $default_args_ref = {
option1 => 'xxx',
option2 => 'yyy',
};
$args_ref = { %$default_args_ref, %$args_ref, };
}

那么你的 test_sub 可能会被这样调用......

test_sub { option1 => 'zzz' };

...甚至...

test_sub {};

关于perl - 如何确定哈希值中的元素个数是否为奇数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11062586/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com