책 LearningPerl 1장에 나오는 [[Perl]]코드 예제. 이 예제하나로 [[Perl]]에 대한 많은 것들을 느껴볼 수 있다.

.secret 파일내의 사용자 암호를 읽어서 해당 암호와 맞는 사용자인지 체크하는 스크립트. (sayhello.pl)

{{{#!perl
init_words();
print "what is your name? ";
$name = <STDIN>;
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 = <STDIN>;
    chomp $guess;
    while(!good_word($name, $guess)) {
        print "Wrong, try again. What is the secret word? ";
        $guess = <STDIN>;
        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 = <WORDSLIST>) {
                chomp $name;
                $word = <WORDSLIST>;
                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 = <WORDSLIST>) {
            chomp $name;
            $word = <WORDSLIST>;
            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모듈을 임포트해서 써야한다.