2014-09-17 2 views
0

perl에서 해시 배열을 생성하려고하는데 인쇄 된 유일한 것이 입력 된 마지막 해쉬이므로 인쇄하는 데 문제가 있습니다.배열에 해시 추가하기

해시 테이블을 배열에 푸시하는 방법에 문제가 있습니까? 또한 배열 (해시 테이블)의 내용을 제대로 인쇄하려면 어떻게해야합니까?

print "\n===========SUBJECTS===========\n"; 
my $exit = "n"; 
until ($exit eq "y") { #loops until user enters 'y' 
    print "Course Number: "; 
    my $cNum = <STDIN>; 
    chomp($cNum); 

    print "Course Credit: "; 
    my $cCred = <STDIN>; 

    print "Grade: "; 
    my $cGrade = <STDIN>; 

    %subHash = (
     "courseNumber" => $cNum, 
     "courseCredit" => $cCred, 
     "courseGrade" => $cGrade, 
    ); 
    push @subList, \%subHash; 
    $subCount += 1; 

    print "\nFinished adding subjects?\n[y/n]\nCHOICE: "; #asks for subject input termination 
    $exit = <STDIN>; 
    chomp($exit); 
    print "\n==============================\n"; 
} 
+0

어떻게'@ subList'를 인쇄하려고합니까? – Slade

+0

'my % subHash = ...'때마다 새로운 subHash를 선언하십시오. –

답변

0

답변은 이미 제공되었습니다. 숙제에 복사하여 붙여 넣기가 어려워요?

use strict; 
use warnings; 

my @subList; 
print "\n===========SUBJECTS===========\n"; 
my $exit = "n"; 
until ($exit eq "y") { #loops until user enters 'y' 
    print "Course Number: "; 
    my $cNum = <STDIN>; 
    chomp($cNum); 

    print "Course Credit: "; 
    my $cCred = <STDIN>; 
    chomp($cCred); 

    print "Grade: "; 
    my $cGrade = <STDIN>; 
    chomp($cGrade); 

    push @subList, { 
     "courseNumber" => $cNum, 
     "courseCredit" => $cCred, 
     "courseGrade" => $cGrade, 
    }; 

    print "\nFinished adding subjects?\n[y/n]\nCHOICE: "; #asks for subject input termination 
    $exit = <STDIN>; 
    chomp($exit); 
    print "\n==============================\n"; 
} 

foreach my $hashref (@subList) { 
    while (my ($key, $val) = each %{$hashref}) { 
     print "$key => $val\n"; 
    } 
    print "-----\n"; 
} 
+0

무례하지만, 내가 묻는 사람 이니까 선택의 여지가 없어, 응? 어쨌든 이전에 말했듯이 (실제로 게시하기 전이라도) 이전에 입력했거나 입력 한 마지막 입력 또는 마지막 입력의 뒤죽박죽 엉망으로 인쇄합니다. – user4048412

+0

게시 한 항목을 실행 해 보셨습니까? 그것은 문자 적으로 당신이 요청한 것과 정확히 똑같습니다. 그래서 당신이 제안하지 않는 것이 무례하게 보입니다. 게시 한 코드에는 사용자 입력을 모두 chomp하지 않아도 오류가 있습니다. – ugexe

+0

나는 당신의 일을 시도했다. 그것은 효과가있었습니다. 당신이 뭘했는지 비교하면, Ithe 문제는 배열에 내 해시를 푸는 방법이라는 것을 알았습니다. 고맙습니다. – user4048412

0

해쉬 참조의 배열을 반복하여 각각의 참조를 적절하게 참조 해제해야합니다.

for my $hash_ref (@AoH) 
{ 
    for my $key (keys %{$hash_ref}) 
    { 
     print "$key => $hash_ref->{$key}\n" 
    } 
} 

또는

for my $hash_ref (@AoH) 
{ 
    while (my ($key, $val) = each %{$hash_ref}) 
    { 
     print "$key => $val\n"; 
    } 
} 

은 그들을 밖으로 인쇄를 포함하여 중첩 된 데이터 구조에 대한 자세한위한 perldoc perldsc를 참조하십시오.

+0

답변 해 주셔서 감사합니다. 그러나, 나는 이미 이것을 시도했다. 키 - 값 쌍을 제대로 인쇄하지 못했고 두 번째 부분 만 마지막 입력과 마지막 입력으로 인쇄했습니다. – user4048412

+0

@ user4048412'Data :: Dumper' 모듈을 사용하고 데이터 구조를 출력하십시오. 그런 다음 원하는대로 구성되었는지 확인할 수 있습니다. –

+0

@ user4048412 질문을 편집하여 코드를 표시 할 수 있습니까? 코드가 무엇인지 모르는 상태에서 문제를 찾는 것은 매우 어렵습니다. – Slade