0

さらに別のデータ構造の疑い。私はそれに直行します。これは私が持っているものです

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明らかにハッシュ内のハッシュなどですが、最初のノードを削除した後、データ構造の整合性が妨げられるのはなぜですか?(出力の最後の行のエラーを参照してください)

4

2 に答える 2

3
それは明らかにハッシュ内のハッシュなどです

実際、そうではないことは明らかです。各 next は、ハッシュへの参照ではなく、ハッシュへの参照への参照を保持します。すべての " \"に注意してください。あなたは見ているは​​ずです

$VAR1 = {
  'next' => {
    'next' => {
      'next' => {
        'next' => undef,
        'data' => 'line 4'
      },
      'data' => 'line 3'
    },
    'data' => 'line 2'
  },
  'data' => 'line 1'
};
于 2012-06-08T05:03:42.950 に答える
-1

Perl のリファレンスはトリッキーです。ダンパーの出力表記は、フィールドにハッシュへの参照への参照が含まれて\{いることを示しています。{next}

問題のある行は への更新tailです。試す

$tail = \$node->{"next"}; 
于 2012-06-08T05:04:50.730 に答える