2014-10-14 3 views
0

일부 Perl 스크립트를 수정해야하며이 언어를 처음 사용합니다.Perl에서 의미가있는 것은 무엇입니까?

print for (@$result); 

내가 $가 전체 배열을 반환 $ 결과 @ 배열을 참조하고 인 결과를 알고 : 나는 다음과 같은 성명을 발생했습니다. 을 의미합니까?

미리 감사드립니다.

+0

확인 [문 수정]을 (http://perldoc.perl.org/perlsyn.html#Statement-Modifiers) –

+0

또한이 단지'로 작성했습니다 수 있습니다 print @ $ result; ' – Miller

답변

4

for (@$result) { print; }에 해당하며, for (@$result) { print $_; }에 해당합니다. $_은 현재 요소를 나타냅니다.

+0

감사합니다 !! 좋아, 한 번 더 작은 것. 다음과 동등한가? for $ row (@ $ result) {print $ row;} – Ameen

+0

'$ row'가 아직 범위 내에 있지 않은 경우에만 (이 경우'my $ row'를 사용해야합니다). '$ row'가 범위 내에 있으면,'my'로 그림자를하지 않으면 덮어 씁니다. – rightfold

+1

@Ameen 즉, for $ var (...) {...}'을 수행한다면 반드시 my $ var (...) {...}'를 수행해야합니다. – ikegami

4

Perl에는 암시 적 변수와 같은 것이 있습니다. 이미 $_으로 보셨을 것입니다. 기본적으로 $_에서 작동하는 perl에는 많은 내장 함수가 있습니다.

$_은 루프와 같은 다양한 장소에 설정됩니다. 그래서 당신은 할 수 있습니다 :이 라인의 각 $_을 사용하고 잘 지내을 수정하는 것입니다

while (<$filehandle>) { 
    chomp; 
    tr/A-Z/a-z/; 
    s/oldword/newword/; 
    print; 
} 

. 귀하의 for 루프도 동일하게 진행됩니다. 루프의 각 반복은 $_을 현재 값으로 설정하고 print은 기본적으로이를 수행합니다.

유용하고 영리한 반면 혼란스럽고 이해하기 어려운 코드를 작성하는 좋은 방법이기도합니다. 예를 들어 중첩 루프에서 $_을 사용하면 실제로 어떤 일이 벌어지고 있는지 확실히 알 수 없습니다.

그래서 나는 보통 거라고 :

  • 을 피 명시 적으로 작성 - 당신이 할 필요가있는 경우, 당신은 제대로 변수를 명명 실제로 고려해야한다.

  • 어떤 일이 벌어지고 있는지 명확하게 보여주는 곳에서만 사용하십시오. 경험적으로 말하면, 두 번 이상 사용하는 경우 은 아마도 명명 된 변수를 사용해야합니다.

파일 핸들을 반복 할 경우 특히 유용합니다. 예컨대 :

while (<$filehandle>) { 
    next unless m/keyword/; #skips any line without 'keyword' in it. 
    my ($wiggle, $wobble, $fronk) = split (/:/); #split $_ into 3 variables on ':' 
    print $wobble, "\n"; 
} 

단지 즉시 폐기, <$filehandle>에서 선을 캡처하는 변수 이름을 할당 중복 될 것이다 - 따라서 대신에 우리는 3 개 값을 추출하기 위해 기본적으로 $_을 사용 split를 사용합니다.

무슨 일이 일어나는지 파악하기가 어렵다면 더 유용한 방법 중 하나는 perl -MO=Deparse을 사용하여 스크립트의 '구문 분석 된'버전을 다시 인쇄하는 것입니다. 이 예에서 그래서 당신은 제공 :

foreach $_ (@$result) { 
    print $_; 
} 
관련 문제