Tuesday, December 25, 2012

Perl의 Predefined Names

Predefined Names
$_, $! 등 설명.

$_
$_ 는 쉽게 말해 자연어의 '그거' 와 비슷하다. 예를 들면 다음 코드는
 while ($inputLine = <STDIN>) {  
   print($inputLine);  
 }  
다음과 같이 쓸 수 있다.
 while (<STDIN>) {  
   print();  
 }  
그 이유는 if 문의 내부 혹은 print 문의 내부에 argument 를 지정해주지 않으면 그것은 디폴트 파라메터인 $_ 가 되기 때문이다. 즉 위 코드는 아래 코드와 동일.
 while ($_ = <STDIN>) {  
   print($_);  
 }  
이는 단지 syntactic sugar 라기보다는 Perl 의 귀차니즘 철학을 잘 나타내주는 핵심기능으로 매우 자주 쓰인다.

$_의 사용예
 $FILE = "/Users/hur/new/Work cur/scripts/MyPerlScripts/testText.txt";  
 open(FILE);  
 foreach (<FILE>) {  
      chomp();  
      print();  
      print(" ");  
 }  
 close(FILE);  
위 코드에서 foreach 의 대상이 되는 변수도, chomp() 의 대상이 되는 변수도, print() 의 대상이 되는 변수도 전혀 지정되지 않았다. 이런 경우는 '그거' 즉 $_ 를 대상으로 삼는다. 즉 위 코드는 아래의 것과 동일하다.
 $FILE = "/Users/hur/new/Work cur/scripts/MyPerlScripts/testText.txt";  
 open(FILE);  
 foreach $_(<FILE>) {  
      chomp($_);  
      print($_);  
      print(" ");  
 }  
 close(FILE);  

$/
이것은 input record separator 라고 하여 Diamond operator 가 읽어오는 단위를 결정해준다.
디폴트값은 newline 이다. 즉 $/ 가 디폴트값인 newline 으로 되어 있으면 $line = <FILE> 을 실행할 때 newline 단위로 한줄씩 읽어온다.

$! 
$! 는 최근의 error number이다.
open (F, $filepath) or die "can not open file. Error number : $!";  와 같이 씀.

기타
$& 는 속도를 떨어뜨리므로 쓰지 않는게 좋다고 함 (출처)

No comments:

Post a Comment