2014-06-10 3 views
6

그래서 많은 수의 <FILE>을 사용했습니다. 간단한 예는 다음과 같습니다그래서 정확히 <FILE>는 무엇을합니까?

open (FILE, '<', "someFile.txt"); 
while (my $line = <FILE>){ 
print $line; 
} 

그래서, <FILE>를 사용하여 (특히 선) 한 번에 파일의 AA 참여하고 그것을 사용하고, 그것이 다시 호출 될 때, 그것은 것 것이라고 생각했다 다음 줄로 가라. 그리고 실제로, 내가 <FILE>을 스칼라로 설정할 때마다 그것이 정확히 무엇을 할 것인가입니다. 그러나 컴퓨터에 다음과 같이 한 줄을 말하면 :

print <FILE>; 

전체 파일, 개행 문자 및 모두를 인쇄했습니다. 그래서 제 질문은 컴퓨터가 정확히 <FILE>을 통과했을 때 어떻게 생각합니까?

답변

12

다이아몬드 연산자 <>은 실제로 파일에서 읽는 데 사용되며 readline 기능이 내장되어 있습니다. perldoc -f readline

가입일

누구 타입 글로브 EXPR에 포함 된 (또는 ARGV *로부터 expr이 제공되지 않는 경우) 핸들에서 읽는다. 스칼라 컨텍스트에서 각 호출은 파일 끝에 도달 할 때까지 다음 행을 읽고 반환합니다. 그러면 후속 호출은 undef를 반환합니다. 목록 컨텍스트에서 파일 끝에 도달 할 때까지 읽고 줄 목록을 반환합니다.

당신이 펄에서 특정 상황을 확인하고 싶은 경우,

sub context { return wantarray ? "LIST" : "SCALAR" } 

print my $line = context(), "\n"; 
print my @array = context(), "\n"; 
print context(), "\n"; 

출력

SCALAR 
LIST 
LIST 
7

스칼라 컨텍스트 또는 목록 컨텍스트에서 사용되는지 여부에 따라 다릅니다.

스칼라 컨텍스트에서 : my $line = <file> 그것은 넥타이로 한 행을 읽습니다.
목록 컨텍스트에서 : my @lines = <FILE> 전체 파일을 읽습니다.

print <FILE>;라고하면 그 목록 컨텍스트입니다.

2
동작은이 평가되는 내용 문맥에 따라 다른

:

my $scalar = <FILE>; # Read one line from FILE into $scalar 
my @array = <FILE>; # Read all lines from FILE into @array 

print은 목록 인수 인 <FILE>은 목록 컨텍스트에서 평가되고 후자의 방식으로 동작합니다.

관련 문제