요즘 펄을 공부해 보고 있습니다.
헌데 파일핸들 단원에서 이런 게 나오더군요.
$file = ‘test1.txt’;
open(INFO, $file);
…(중략)…
close(INFO);
여기서 INFO는 대체 뭘 의미하는 거죠?
요즘 펄을 공부해 보고 있습니다.
헌데 파일핸들 단원에서 이런 게 나오더군요.
$file = ‘test1.txt’;
open(INFO, $file);
…(중략)…
close(INFO);
여기서 INFO는 대체 뭘 의미하는 거죠?
[quote="포풍저글링":tzx7ae6c]요즘 펄을 공부해 보고 있습니다.
헌데 파일핸들 단원에서 이런 게 나오더군요.
$file = ‘test1.txt’;
open(INFO, $file);
…(중략)…
close(INFO);
여기서 INFO는 대체 뭘 의미하는 거죠?[/quote:tzx7ae6c]
open 함수의 첫번째 인자는 filehandle(파일핸들)을 받습니다. 즉, INFO는 파일핸들입니다.
다른 이름으로 바꿔도 됩니다. 문자열이 아니고, 해쉬도 아니고, 파일핸들인 것입니다.
모든 코드 일부분은 반드시 하나의 패키지 안에 속합니다. 명확히 기제하지 않을 경우, main 패키지가 기본값입니다. main 패키지는 프로그램을 처음 실행할 때 실행되는 패키지입니다.
하나의 패키지에는 내부적으로 전역 변수들 같은 것들을 보관하고 관리하는 하나의 심볼테이블이 있습니다. 이것은 심볼들을 보관하는 하나의 표(테이블)입니다. 하나의 심볼은 typeglob 라고 불립니다. typeglob는 sigil(이름 앞에 $, % 등을 붙이는 기호)로 *을 사용합니다. 하나의 typeglob 안에는 여러개의 slot이 있습니다. slot에는 각각, 스칼라, 해쉬, IO 등이 있습니다. 이곳에 기록되는 것들은 전역적이기 때문에, 어디서나 접근할 수 있습니다. 패키지의 외부에서도 여기에 기록된 심볼테이블에 접근하여 변수의 값을 취할 수 있게 됩니다.
[code:tzx7ae6c]심볼테이블
*INFO (하나의 typeglob)
[code:tzx7ae6c]#!/usr/bin/perl
package somi;
print "bye"; #somi패키지는 스크립트 실행시 바로 실행되지 않는다.
package main;
print "hi"; #main 패키지에서 시작하므로 hi를 출력하고 끝나게 된다.[/code:tzx7ae6c]
[code:tzx7ae6c]#!/usr/bin/perl
print "hi"; # 패키지를 기제하지 않았더라도 main 패키지에 있는 것이다.[/code:tzx7ae6c]
[code:tzx7ae6c]package somi;
$cocoa = 4;
package main;
print $somi::cocoa;[/code:tzx7ae6c]
$cocoa 변수는 완전히 전역적이며, 외부에서도 접근 가능합니다.
즉, main 패키지에서 somi 패키지의 cocoa 변수에 접근하여 4를 출력하게 됩니다.
$cocoa 스칼라 변수는 somi 패키지의 심볼테이블에 기록되어 있을 것입니다.
[code:tzx7ae6c]somi 패키지
somi::cocoa (하나의 slot)
지금까지 한 말을 한마디로 정리하자면,
그냥 전역변수고, filehandle인데, filehandle은 앞에 sigil이 붙지 않더라. 라는 것입니다.
그런데 파일핸들 값을 전역적으로 공개하는 것은 좋은 코드가 아닙니다.
그래서 사실 open(INFO, $file)과 같은 코드는 완전히 시대에 지난 스타일의 코드입니다.
즉, 해당 책의 정보가 많이 구식이라고 할 수 있습니다.
현대 Perl에서는 아래와 같이 지역변수를 명확히 선언하여 사용합니다.
[code:tzx7ae6c]open my $fh, "<", $file;[/code:tzx7ae6c]
모든 Perl 스크립트는 거의 반드시 strict, warnings 플래그마를 사용합니다.
즉 모든 스크립트의 최상단에는
[code:tzx7ae6c]#!/usr/bin/perl
use warnings;
use strict;[/code:tzx7ae6c]
과 같이 시작합니다. 이렇게 하면 open(INFO, $file) 부분에서 경고를 발생하게 됩니다.
모든 변수는 지역적으로 선언합니다.
즉,
$var = 4; 라고 사용하지 않고
my $var = 4; 와 같이 선언합니다.
자세한 내용은 아래 링크를 참고합니다:
[url:tzx7ae6c]http://doc.perl.kr/twiki/bin/view/Wiki/HowToStartPerl[/url:tzx7ae6c]