perl 中的奇数哈希表示

Odd hash representation in perl

我有一个包含以下内容的散列,通过 Data::Dumper 转储:

$VAR1 = [
      0
    ];

这是什么意思?我似乎无法理解“0”是否是一个没有分配给它或任何其他东西的键。唯一的线索是我在下面收到这个错误,它说散列不能被零字符串引用,对吗?

Can't use string ("0") as a HASH ref while "strict refs" in use at FOO.pm

将其分配给散列的方式是模糊的,因为代码是受限制的,但在其他一些情况下,这个相同的散列有类似

的东西
$VAR1 = [
          {
            'ExtraInfo->m_Fade_Notification_Timer' => 'RTPC',
            'ExtraInfo->m_FarEndNESlot' => '28 MHz',
            'ExtraInfo->m_Temperature_Ra2' => '',
            'ExtraInfo->m_Path' => '',
            'ExtraInfo->m_Radio_Terminal_Name' => 'ST01',

          }
        ];

不涉及哈希。 $VAR1 = [ 0 ]; 表示转储变量是对数组的引用,该数组的单个元素由数字零组成。

您可以使用 ref() 命令检查它是什么类型的引用。如果它 returns 'HASH' 用于该变量,那么您可以安全地将它用作您期望的哈希引用。如果不是,那么您的传入数据不是您所期望的,您可以引发异常或以其他方式处理它。

if (ref($data) eq 'HASH') {
    while (my ($key, $value) = each %{$data}) {
        ...
    }
} else {
    die "Unexpected data";
}

或者你可以在比较中使用两次 ref(),给它你想要的结构。这避免了对特定字符串值进行编码:

if (ref($data) eq ref({})) {
    ...