'삽질+돈되는짓/펄떡펄떡(Perl)'에 해당되는 글 2건

  1. 2008.09.10 PerlIO을 아십니까?
  2. 2008.09.05 하악하악 CPAN author가 되었어용 (2)
posted by 아겔-_- 2008.09.10 14:15
PerlIO을 아세용?

혹은 'open' 함수를 사용하실때
open FH, "<foo.txt";
...와 같이만 사용한다고 생각하세용?

사실은 'open'함수에는 3개의 인자를 주는것을 더 권장하는것 같습니다.
open FH, "<", "foo.txt";    # foo.txt을 읽기로 엽니다.
open FH, ">:crlf", "bar.txt";    # bar.txt에 도스형식개행문자(CR/LF)로 출력합니다.
open FH, "<:mmap", "zoo.txt";    # zoo.txt에서 읽을때 mmap을 이용한 버퍼를 이용합니다. ;-)
open FH, "<:utf8", "spam.txt";    # spam.txt에서 UTF-8 인코딩을 읽어들입니다.
open FH, "<:encoding(utf8), "spam.txt";    # 위와 같음. ^^;
open FH, "<:gzip", "foo.txt.gz";    # gzip으로 압축된 foo.txt.gz을 압축을 풀어 읽어들입니다.

기존에 'binmode'을 이용해서 조작하던 내용들이 open에서 직접 함을 알 수 있습니다.
추가적으로 :gzip, :mmap이나 :win32같은 재미있는부분들도 있네요. ^^

perldoc: PerlIO, PerlIO::encoding


내부적으로 PerlIO layer을 사용하나 봅니다.

그리고 더 재미있는 부분은 ":via()"인것 같아효. (perldoc: PerlIO::via)

간단한 예제로는 다음같은것을 생각해볼수있겠네용.

use PerlIO::via::Bzip2;

my $fh;
open($fh, "<:via(Bzip2)", $filename) or die("FILE-OPEN FAIL!");
print <$fh>;
close($fh);

Bzip2 포맷으로 압축된 파일을 읽어들이는 예제에요. (:gzip이랑 유사하죠?^^;)

혹은 좀 더 재미있게 확장도 가능한것 같아요. 유닉스의 '필터filter' 개념처럼 한번 via로 지정한 모듈을 거쳐서 그 결과를 사용자에게 전달하는 방식인것 같아요. (물론 얼마든지 사용자가 추가도 가능하겠죵)

다음처럼 단순히 파일을 펄 기본 함수와 연산자들을 이용해서 md5을 아름답게 구할수도 있답니당.

use PerlIO::via::MD5;

PerlIO::via::MD5->method('hexdigest');    # 나중에 digest값을 어떤식으로 되돌릴지 지정합니당.
my $fh;
open($fh, "<:via(MD5)", "/etc/passwd") or die("FILE-OPEN FAIL");
my $digest = <$fh>;    # 단순히 문자열을 얻어내듯이 각 라인을 via(MD5)을 거쳐서 digest-update
close($fh);
print $digest, "\n";    # 맨 마지막 결과값은 파일의 모든 내용을 digest한 값이므로 파일전체의 md5sum이지용.


알면 알수록 넓은 펄이라는 생각이 들어요. 단순히 open이 별거 아니라고 생각했었는데 이렇게 막강한 구조였네요. ^^


ps. "cat /etc/passwd |", "| wc -l"와 같이 쉘커맨드와 "|"의 위치에 따라서 입출력이 결정되던 pipe-open의 경우에는 "-|", "|-"으로 사용하실 수 있나봐용. 세번째 파일이름 부분에는 단순히 쉘 커맨드만 들어가게 되구요. ^^
신고

'삽질+돈되는짓 > 펄떡펄떡(Perl)' 카테고리의 다른 글

PerlIO을 아십니까?  (0) 2008.09.10
하악하악 CPAN author가 되었어용  (2) 2008.09.05
posted by 아겔-_- 2008.09.05 17:15
http://pause.perl.org/에 계정을 만들었어용.

계정을 만들고, 적당히 새로운 모듈 네임스페이스를 등록하고 확인을 받았어용.

작업해서 올려야겠지용. 대략 다른분들이 작성하신 비슷한 모듈을 참고하면서 공부하고 있어용... 예전에 rubyforge에 올린 모듈을 펄 모듈로 완전히 다시 작성해서 만들려구용. 우연찮게 해당 바인딩 모듈이 CPAN에 없더라구용...

취미가 하나 생겨버린듯 하네용. 하악...



신고

'삽질+돈되는짓 > 펄떡펄떡(Perl)' 카테고리의 다른 글

PerlIO을 아십니까?  (0) 2008.09.10
하악하악 CPAN author가 되었어용  (2) 2008.09.05

티스토리 툴바