我一直在 if 语句中使用存在和定义
if (exists($a->{b}) and defined($a->{b})
有没有同时做这两个的子程序?
更新:
似乎我没有给出很好的示例代码。要获得更好的问题和匹配的答案,请查看checks-for-existence-of-hash-key-creates-key。
我一直在 if 语句中使用存在和定义
if (exists($a->{b}) and defined($a->{b})
有没有同时做这两个的子程序?
更新:
似乎我没有给出很好的示例代码。要获得更好的问题和匹配的答案,请查看checks-for-existence-of-hash-key-creates-key。
这和
if (defined($a->{b}))
关于评论中的回复,defined
不实例化密钥。
>perl -E"if (exists($a->{b}) and defined($a->{b})) { } say 0+keys(%$a);"
0
>perl -E"if (defined($a->{b})) { } say 0+keys(%$a);"
0
->
,另一方面,自动激活正常。
>perl -E"if (defined($a->{b})) { } say $a || 0;"
HASH(0x3fbd8c)
但情况也是exists
如此。
>perl -E"if (exists($a->{b}) and defined($a->{b})) { } say $a || 0;"
HASH(0x81bd7c)
如果你想避免自动复活,你会使用
>perl -E"if ($a && defined($a->{b})) { } say $a || 0;"
0
或者
>perl -E"no autovivification; if (defined($a->{b})) { } say $a || 0;"
0
defined(...)
只有当为真时才能exists(...)
为真,所以你的问题的答案是调用子例程defined
。
如果您只想检查密钥是否存在(即使 undef),那么只需使用exists()
这是一个相关的问题,可以很好地解释它:存在和定义之间有什么区别?