책 LearningPerl 1장에 나오는 [[Perl]]코드 예제. 이 예제하나로 [[Perl]]에 대한 많은 것들을 느껴볼 수 있다. .secret 파일내의 사용자 암호를 읽어서 해당 암호와 맞는 사용자인지 체크하는 스크립트. (sayhello.pl) {{{#!perl init_words(); print "what is your name? "; $name = ; chomp $name; if($name =~ /^randal\b/i) { print "Hello, Randal! How good of you to be here!\n"; } else { print "Hello, $name!\n"; print "What is the secret word? "; $guess = ; chomp $guess; while(!good_word($name, $guess)) { print "Wrong, try again. What is the secret word? "; $guess = ; chomp $guess; } } dbmopen(%last_good, "astdb", 0666); $last_good{$name} = time; dbmclose(%last_good); sub init_words { while($filename = <*.secret>) { open(WORDSLIST, $filename) || die "can't open $filename: $!"; if(-M WORDSLST < 7.0) { while($name = ) { chomp $name; $word = ; chomp $word; $words{$name} = $word; } } else { rename($filename, "$filename.old") || die "can't rename $filename: $!"; } close WORDSLIST; } } sub good_word { my($somename, $someguess) = @_; $somename =~ s/\W.*//; $somename =~ tr/A-Z/a-z/; if($somename eq "randal") { return 1; } elsif (($words{$somename} || "groucho") eq $someguess) { return 1; } else { open(MAIL, "|mail yong27@naver.com"); print MAIL "bad news: $somename guessed $someguess\n"; close MAIL; return 0 } } }}} 현재 모든 사용자의 암호를 출력하는 스크립트 (list.pl) {{{#!perl while($filename = <*.secret>) { open(WORDSLIST, $filename) || die "can't open $filename: $!"; if(-M WORDSLIST < 7.0) { while($name = ) { chomp $name; $word = ; chomp $word; write; } } close(WORDSLIST); } format STDOUT = @<<<<<<<<<<<<<<< @<<<<<<<<<<<<< @<<<<<<<<<<<<<<<< $filename, $name, $word . format STDOUT_TOP = Page @<< $% Filename Name Word ========== ====== ======= }}} [[Python]]과 비교해서 느껴볼 수 있는 [[Perl]]의 특징 1. 핸들러(파일따위)는 <> 연산자로 감싸고, 라인단위로 출력된다. 1. "|| die" 문을 통한 AssertiveProgramming. 이는 Python의 예외처리와 많이 다르다. file을 열었는데, 뭔가 문제가 생겼다하면, perl은 해당 구문이 false가 되면서 그냥 넘어가지만, python은 명시적으로 예외를 발생시킨다. 그리고, 문제상황이 출력된다. python이 좀더 explict하다고 이야기할 수 있다. 1. open으로 열었을때 문자열내에 '|'(파이프)를 이용한 외부프로세스 돌리기. 1. $,@,% 변수,배열,해쉬의 적절한 이용. 1. 문자열치환등은 RegularExpression의 자체사용 1. 경로내의 WildCard사용은 <> 연산자안에서 바로 이용가능. python은 glob모듈을 임포트해서 써야한다.