2014-02-26 3 views
0

나는 perl cgi 프로그램을 지원하려고 애를 썼다.일반 변수와 같은 이름의 해쉬를 출력하는 방법

$ args를 취하고 $ args가 무엇인지보고 싶습니다.

는 여기에 내가 먼저 시도하는 방법은 다음과 같습니다

print("=== DEBUG 2 === Creating session with the following args: ", $args, "\n"); 

인쇄 어느 :

=== DEBUG 2 === Creating session with the following args: HASH(0x2b462cc7c880) 

그래서 잘, 아, 해시입니다. 약간의 인터넷 검색과 나는이 시도 :

my $counter = 1; 
print("=== DEBUG === Creating session with the following args: \n"); 
foreach (keys $args) { 
    print "$_ : $args{$_}\n"; 
} 

이 아무 도움이 오류 메시지와 함께 충돌이 전체 프로그램을 발생합니다. 나는 $ args가 키와 함께 사용될 수 없다고 생각한다.

$ args의 내용을 인쇄하려면 어떻게 덤프 할 수 있습니까?

참고 : Data Dumper를 사용하면 전체 프로그램이 오류 메시지없이 중단됩니다.

+1

:

foreach (keys %$args) { # You could use this: # print "$_: ${$args}{$_}\n"; # but the -> operator is a little more readable. print "$_: $args->{$_}\n"; } 

each 운영자는 각 키와 값의 이름을 제공하는 동안 해시를 반복 할 수 있습니다? 이것은 해쉬에 대한 참조이므로'Dumper ($ args)'라고 부를 것입니다. – scrappedcola

+0

명령 줄에서 CGI를 테스트하고 있습니까? 그렇다면 출력을 좀 줄여야합니다. – ThisSuitIsBlackNot

답변

3

$args 해시 아니라, 해시 참조입니다. 기본 해시에 액세스하려면 우선 참조 해제해야합니다. 어떻게 데이터 덤퍼를 호출

while (my ($key, $value) = each %$args) { 
    print "$key: $value\n"; 
} 
1

이 방법을 시도해보십시오

foreach (keys %{$args}) { 
    print "$_ : ".$args->{$_}."\n"; 
} 

아마 $ 인수는 해시하지만 해시에 대한 참조하지 않습니다.

+0

감사합니다. – Lurk21

1

$ args가 해시 참조 인 것 같습니다.

전체 해시를 인쇄하려면 :

print %$args; 

키에 의해 키를 그것을 인쇄하려면 :

print "$_ $args->{$_}\n" foreach (keys %$args); 
관련 문제