2011-11-06 3 views
3

나는 Perl을 배우기 시작했다. 그리고 이것은 이상한 결과물을 얻고 이것에 대한 약간의 명확성을 기대하고있는 루프를위한 기본적인 것이다.Perl의리스트를 통해 반복하기.

@numbers = {1,4,5,6,7,8,9}; 
for(my$i = 0; $i<=$#numbers; $i++) 
{ 
    print ("$numbers[$i}\n"); 
} 

출력이 HASH (0x23a09c)입니다.

실제로 이것이 의미하는 바는 무엇이며이 결과가 나타나는 이유는 무엇입니까?

관련 아리안

+1

예에 구문 오류가 있습니다. 실제로 사용하고있는 것을 게시하십시오. – Mat

+0

죄송합니다 ... 감사합니다 – Arianule

답변

13

당신이 원하는 : {1,4,5,6,7,8,9}

@numbers = (1,4,5,6,7,8,9); 
foreach my $number (@numbers) 
{ 
    print ("$number\n"); 
} 

당신은 실제로 키 값 쌍 (1 => 4, 5 => 6, 7 => 8, 9 => undef)을 포함하는 익명의 해쉬에 대한 참조를 만드는 것입니다. @numbers = {1,4,5,6,7,8,9};을 쓸 때 참조가 @numbers 배열에 저장된 유일한 스칼라가됩니다.

또한 요소를 반복하고 싶다면 카운터가있는 "클래식"스타일을 사용할 필요가 없습니다.

당신은 할 수 있습니다 :

for my $number (1 .. 9) { 
    print "$number\n"; 
} 

당신은 당신이 쓰는 모든 Perl 스크립트의 시작 부분에 use strict;use warnings;이 있는지 확인합니다. 이러한 지시문을 사용하면 perl에서 오류를 포착하고 오류 코드가 있음을 경고 할 수 있습니다. 초보자 인 경우 자세한 정보를 얻으려면 warnings 인 사람들과 diagnostics을 연결해야 할 수 있습니다.

이것은 매우 편리합니다. 특히 Perl로 시작할 때 특히 발에서 자신을 방지하는 데 도움이되므로 편리합니다.

+0

감사합니다. 중괄호는 해시로 해석되었습니다. 배열을 선언 할 때 중괄호를 사용하는 데 사용됩니다. – Arianule

+0

No prob : 나는 아직도 Perl과 약간 고심하고있다. 문제가 해결되면 동의하십시오. 감사합니다 – pcalcao

1

시도 :

당신이 거기에 인덱스 0 해시 ​​심판 배열을 만드는 무슨 일을하는지
@numbers = (1,4,5,6,7,8,9); 
foreach(@numbers) { 
    print $_; 
} 
+0

원본 포스터의 코드를 사용해 보셨습니까? 왜 안돼?문제는 루프 문이 아니라 변수의 유형입니다. – Jens

+0

두 가지 문제점이있었습니다. 하나는 루프 자체에, 하나는 선언과 함께 사용됩니다. 내 대답은 루프에 초점을 맞추었고 어떤 대안이 더 짧은지 알 수있었습니다. 댓글을 주셔서 감사합니다, 나는 내 게시물을 편집했습니다! – interphase27

+0

'print $ _'은 중복됩니다. – TLP

5

, 즉 : 당신이 엄격한 사용했다면

$numbers[0] = { 
    1 => 4, 
    5 => 6, 
    7 => 8, 
    9 => undef, 
}; 

당신이 볼 것입니다 :

Global symbol "@numbers" requires explicit package name 

및 경고 말했을 것이다 :

같은 뭔가
Odd number of elements in anonymous hash 

시작 모든 펄 스크립트 :

#!/usr/bin/perl -w 
use strict; 

(또는 use warnings;)와 항상 바로 이러한 종류의 오류를 잡을 수 있습니다. 숙련 된 펄 프로그래머조차도 때때로 수작업으로 만듭니다. 골프를 치지 않는 한, 그들을 내버려 두지 않는 이유가 절대 없습니다.

+2

+1 * 컴퓨터가 * 말할 수있을 때 백만 명의 사람들에게 묻지 마십시오. '엄격한 사용; ' –

+0

누군가가 http://stackoverflow.com/q/8023959/725418을 읽은 것처럼 보입니다. =) – TLP