2016-11-14 3 views
1
$\ = "\n"; 
sub foo 
{ 
    print("one"); 
} 
foo(); // mark1 

sub foo 
{ 
    print("two"); 
} 
foo(); //mark2 

위의 코드를 실행하면 결과는 2, 2가됩니다. 필자는 Perl이 인터프리터라는 것을 이해하기 때문에 foo (mark1)가 호출 될 때 먼저 인쇄해서는 안되며 foo() (mark2)를 호출하면 두 개가 인쇄되어야한다. 하지만 두 사람이 둘 다 인쇄되는 이유는 무엇입니까?Perl 함수 호출

+0

정말로 컴파일하지 않습니까? – Carcigenicate

+4

'//'는 Perl의 주석이 아닙니다. 주석을 표시하려면'# '을 사용해야합니다. – simbabque

+0

정기적으로 항상'use warnings'과'use strict'를 모든 Perl 5 파일의 시작 부분에 추가하는 것이 좋습니다. –

답변

8

Perl은 사용자가 이해하는 방식으로 해석 된 언어가 아니기 때문에. Perl 코드는 실행 전에 컴파일됩니다. 별도의 컴파일 단계는 없지만 컴파일러는 프로그램 실행을 시작하기 전에 모든 소스 코드를 구문 분석하고 컴파일합니다.

당신은 당신의 코드에서 use warnings를 포함 한 경우에, 당신은 다음과 같은 경고 (첫 번째 함수 호출에서 전에 출력)를 보았을 것 :

서브 루틴 푸 FUNC 줄에서 재정의 (12)

어떤 일이 일어나고 있는지 명확하게 알려줍니다.

아, 그런데 - //은 (는) Perl에서 주석이 아닙니다. 당신은 #을 원했습니다.