【发布时间】:2018-10-09 04:33:54
【问题描述】:
我收到这个错误 -> “不能使用 'defined(@array)' (也许你应该省略defined()?)”
在这行代码上:
if ( defined( @{ $linkbot{"$nroboton"} } ) ) {
我该如何解决这个问题?
【问题讨论】:
标签: perl
我收到这个错误 -> “不能使用 'defined(@array)' (也许你应该省略defined()?)”
在这行代码上:
if ( defined( @{ $linkbot{"$nroboton"} } ) ) {
我该如何解决这个问题?
【问题讨论】:
标签: perl
defined 测试标量值是否为 undef,因此它在数组上是无意义的。您可以在将标量用作 arrayref 之前测试是否已定义标量,或者如果您尝试测试数组是否为空,只需按照错误消息所述删除 defined()。
# if this hash value is defined
if (defined $linkbot{$nroboton}) {
# if this referenced array has elements
if (@{ $linkbot{$nroboton} }) {
【讨论】:
在变量$nroboton 本身上使用define,和/或在匿名数组中使用if (@{$linkbot{$nroboton}}),其引用是该键的值,如解释所示。
一旦您需要检查其中任何一项,按理说您可能还需要测试哈希 %linkbot 中是否存在密钥 $nroboton 和 exists
if ( exists $linkbot{$nroboton} ) { ... } # warning if $nroboton undef
完全是这样
if (defined $nroboton and exists $linkbot{$nroboton}) { ... }
现在您可以检查和处理 arrayref 中的数据,@{$linkbot{$nroboton}}。
请注意,不需要双引号该变量;它将被评估。
【讨论】: