2011-05-07 14 views
20
open my $fp, '<', $file or die $!; 

while (<$fp>) { 
    my $line = $_; 
    if ($line =~ /$regex/) { 
     # How do I find out which line number this match happened at? 
    } 
} 

close $fp; 
+4

줄을 $ line으로 읽으려면 다른 변수에 줄을 읽은 다음 $ 줄에 복사하는 것이 아니라 $ 줄에 줄을 읽습니다. while (my $ line = <$fp>) { – tadmc

+1

@tadmc : 마지막 줄은 0이 될 수 있고 개행 문자로 끝나지 않을 수 있기 때문에'while (defined (my $ line = <$fp>)) {...}'이라고 할 수 있습니다. – phaylon

답변

38

$. (perldoc perlvar 참조)을 사용하십시오.

+25

기술적으로'$ .'는 반드시 줄 번호가 아닙니다; 'readline' 연산자가 핸들의 마지막'close' ('open'이 아닌) 이후에 호출 된 마지막 핸들에서 호출 된 횟수입니다. '$ /'가''\ n ''(예 :'''''\ n %% \ n "')으로 설정되지 않았거나 핸들이 on ('ARGV '와 같이, 그리고'<>'와 함께)'close'를 호출하지 않고 마지막 라인이 맹 글링 된 텍스트 파일에 적절한 라인 종료 시퀀스가없는 텍스트 파일에 의미가 있는지 여부 – tchrist

+6

@tchrist : 최후의 경우에 대한 설명은 세 번째 대답으로 게시되어야합니다. – Dallaylaen

+3

[perldoc eof] (http://perldoc.perl.org/functions/eof.html)는 'continue @chchrist의 좋은 경고 중 하나를 다루면서 while (<>) {...} 부분을 {(계속) ARGV if eof}'사용하여. @ –

13

또한 OO 인터페이스를 통해 작업을 수행 할 수 있습니다

use IO::Handle; 
# later on ... 
my $n = $fp->input_line_number(); 

perldoc perlvar에, 너무.

+5

그것은'$ 물론. – tchrist

관련 문제