2016-06-03 2 views
0

다차원 배열에 문제가 있습니다. 그런 다음 책 Perl 4th edition 페이지 379에서 샘플을 시도했지만 실패했습니다! 왜? 실례에 대한해시 배열 예제가 실패합니다.

#!/usr/bin/perl 

use strict; 
use warnings; 

# example in manual page 379 
# input from file containing: husband=fred pal=barney wife=wilma  pet=dino 
while (<>) { 
next unless s/^(.*?):\s*//; 
my $who = $1; 
    for my $field (split) { 
    (my $key, my $value) = split /=/, $field; 
    my $HoH{$who}{$key} = $value; 
} 
} 

`

답변

2

유용한 트릭 - 당신은 당신의 파일의 끝 부분에 라인 __DATA__, 그리고에 그것을 사용할 수 있습니다. 난 당신의 코드를 실행하면 어쨌든

, 내가 얻을 :

Global symbol "$key" requires explicit package name (did you forget to declare "my $key"?) 
Global symbol "$value" requires explicit package name (did you forget to declare "my $value"? 

는 또한 심하게 %HoH를 선언하는 - 대신 당신이 양식을 사용해서는 안되며, :

my %HoH; 

또한 정규식은 :을 찾고 입력에 아무 것도 포함되어 있지 않으므로 입력 텍스트를 건너 뜁니다. 나는 그 같은 접두사가 flintstone:이어야한다고 생각할 것입니다. 이 (

$VAR1 = { 
      'flintstone' => { 
         'husband' => 'fred', 
         'wife' => 'wilma', 
         'pal' => 'barney', 
         'pet' => 'dino' 
        } 
     }; 
1

귀하의 코드가 어떤 구문 오류를 포함하고 입력 된 텍스트가 잘못되었습니다 :

그래서 간단하게 당신에게 작동하는 것을 제공합니다 :

#! usr/bin/perl 

use strict; 
use warnings; 

use Data::Dumper; 

my %HoH; 

while (<DATA>) { 
    next unless s/^(.*?):\s*//; 
    my $who = $1; 
    for my $field (split) { 
     my ($key, $value) = split /=/, $field; 
     $HoH{$who}{$key} = $value; 
    } 
} 

print Dumper \%HoH; 

__DATA__ 
flintstone: husband=fred pal=barney wife=wilma pet=dino 

이 출력을 덤프 상반기 더 :

이 시도하지 :

my %HoH; 
while (<DATA>) { 
    next unless s/^(.*?):\s*//; 
    my $who = $1; 
    for my $field (split) { 
      my ($key, $value) = split /=/, $field; 
      $HoH{$who}{$key} = $value; 
     } 
    } 

print Dumper \%HoH; 

__DATA__ 
flintstones: husband=fred pal=barney wife=wilma pet=dino 
+0

굉장! 이것은 효과가 있었다. 고마워요 fugu & Sobrique. –