2013-01-13 3 views
0

을 사용하지 않고 Perl 캐스트 해시를 배열에 추가하면 더 많은 변수를 사용하지 않고도 perl의 배열에 해시를 캐스팅 할 수 있습니까? 예상하지만 또 다른 변수 (@arr) 사용되는 이 작동 (? 그들이 뭘 BTW)더 많은 변수

perl -wlae '%hash=(name=>"linus", forename=>"torvalds "); @arr=%hash; print "@arr"' 

내가 그러나 그 시도하지 어느 쪽도 일했다 :

perl -wlae '%hash=(name=>"linus", forename=>"torvalds "); print "@hash"' 
perl -wlae '%hash=(name=>"linus", forename=>"torvalds "); print "%@hash"' 
perl -wlae '%hash=(name=>"linus", forename=>"torvalds "); print "@%hash"' 
+0

완전히 다른 변수 이름을 사용하고 있기 때문에 기대 한 바가 확실하지 않습니다. – Barmar

+0

배열 변수를 선언 할 필요없이 배열에 해시를 캐스팅 할 수 있는지 궁금합니다. –

+0

나도 알아, 근데 왜 너가 시도한 것을 기대 했니? 'hash'라는 이름의 변수를 할당 한 다음, 할당하지 않았더라도 print 문에'arr'을 사용합니다. – Barmar

답변

-2
perl -wlae '%hash=(name=>"linus", forename=>"torvalds "); print (%hash);' 

는 퍼팅 괄호 안의 표현식은 목록 변수에 할당하는 것과 마찬가지로 목록 컨텍스트에서 변수를 평가합니다.

print의 경우 배열 및 해시 모두에 대해 목록 컨텍스트를 사용하므로이 캐스팅은 필요하지 않습니다. 그러나 해시를 사용하여 다른 배열 스타일의 객체를 만들고 싶다면이를 사용할 수 있습니다 (예 :

$first = (%hash)[0]; 
echo $first; 
+0

감사합니다. 괄호는 무엇을 설명해 주시겠습니까? –

+0

답변에 설명이 추가되었습니다. – Barmar

+2

-1 : 귀하의 설명은 이해가되지 않습니다. 'print % hash;는 잘 작동합니다. – Zaid

관련 문제