删除链表的头部不会主哈希结构



又一个数据结构问题。我会直接说出来。这就是我所拥有的

use strict;
use warnings;
use Data::Dumper;
my $head= undef;
my $tail=$head;
open FILE, "<datastored.txt" or die $!;
while (<FILE>){
    my $node = {
                "data" => $_ , 
                "next" => undef
            };
    $$tail=$node; 
    $tail = ${$node->{"next"}}; 
};
# #1# Print full list #
print Dumper $head;
# #2# Delete the first node and display data of next node #
$head = $head->{next};
my $value = $head->{data};

这是我得到的输出

$VAR1 = {
          'next' => {
                        'next' => {
                                      'next' => {
                                                    'next' => undef,
                                                    'data' => 'line 4'
                                                  },
                                      'data' => 'line 3
'
                                    },
                        'data' => 'line 2
'
                      },
          'data' => 'line 1
'
        };
Not a HASH reference at linkedlist.pl line 32, <FILE> line 4. **<<<< My Problem and hence my question?** 

注意 - 文件datastored.txt的内容很简单

line 1
line 2
line 3
line 4

如果我最初查看$head的打印结果,它显然是哈希中的哈希等等,那么为什么删除第一个节点后数据结构的完整性会受到阻碍呢?(请参阅输出最后一行的错误)

显然是哈希中的哈希等等

实际上,显然不是。每个下一个都包含对哈希引用的引用,而不是对哈希的引用。注意到所有的""了吗?你应该看到

$VAR1 = {
  'next' => {
    'next' => {
      'next' => {
        'next' => undef,
        'data' => 'line 4'
      },
      'data' => 'line 3'
    },
    'data' => 'line 2'
  },
  'data' => 'line 1'
};

Perl引用很棘手。 转储程序输出表示法{显示{next}字段包含对哈希引用的引用。

违规行是对tail的更新。 尝试

$tail = $node->{"next"}; 

相关内容

  • 没有找到相关文章

最新更新