열번째 날: Everything is better with perl

저자

@aer0 - Seoul.pm, #perl-kr의 정신적 지주, Perl에 대한 근원적이면서 깊은 부분까지 놓치지 않고 다루는 홈페이지 및 블로그를 운영하고 있다. aero라는 닉을 사용하기도 한다.

@JEEN_LEE - 산간오지 자연청년, 도쿄에 살고있는 꽃청년 하지만 유부남, 한 때 Drip에 일가견이 있던 리즈 시절이 있었다. 블로그인 이빨까기인형을 운영하고 있으며, 기술적이며, 현대적인 Perl 관련 글을 꾸준히 올리고 있다. 주로 jeen이라는 닉을 사용한다.

펄 코드가 실제 어떻게 해석되는지 보기 - @aer0

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
$ perl -MO=Deparse,-p -e '$a*$b+$c'
(($a * $b) + $c);
-e syntax OK
 
 
$ perl -MO=Deparse,-p -e '@a=(1,2)'
(@a = (1, 2));
-e syntax OK
 
 
$ perl -MO=Deparse,-p -e '@a=1,2'
((@a = 1), '???');
-e syntax OK
 
 
$ perl -MO=Deparse,-p -e '! $a > 1 * $b && $c < 2 + 1'
(((!$a) > (1 * $b)) and ($c < 3));
-e syntax OK
 
 
$ perl -MO=Deparse,-p -e 'not $a > 1 * $b && $c < 2 + 1'
(not (($a > (1 * $b)) && ($c < 3)));
-e syntax OK
 
 
$ perl -MO=Deparse,-p -ne 'print'
LINE: while (defined(($_ = <ARGV>))) {
    print($_);
}
-e syntax OK
 
 
$ perl -MO=Deparse,-p -pe 'print'
LINE: while (defined(($_ = <ARGV>))) {
    print($_);
}
continue {
    (print($_) or die("-p destination: $!\n"));
}
-e syntax OK

우리는 어떻게 궐기하는가? - @JEEN_LEE

어제 이종격투기를 해가면서 국회에서 예산안이 통과되었습니다(기사1). 대부분 아마 격투에 집중하며, 다음 총선때 최홍만이냐 추성훈이냐 하며 푸념삼아서 얘기들 하셨을 겁니다. 이 신발끈 풀어먹을 인간들이 4대강 한답시고 결식아동 지원이나 영유아 예방접종비도 다 깎아버렸습니다(기사2, 기사3). 눈에 뵈는 게 없다는 거죠.

우리는 언제까지 이런 꼬락서니를 지켜봐야 하는 건가요?

자, 이런 현실에 분노하며 이제 조선말기의 동학농민운동을 떠올려 봅니다. 그때 농민들은 참 더럽게 못살게 구는 군수 하나때문에 들고 일어났었죠. 뭐 비슷합니다. 군수나 대통령이나 못 살게 굴면 그 밥에 그 나물이죠 뭐.

그런 동학농민운동하면 무엇을 떠올리시나요? 전 항상 사발통문을 떠올립니다. 자, 떠올렸습니다. 그럼 만들어야죠?

CPAN의 Acme::* 관련 모듈은 재미로 만든 모듈을 총괄하는 이름 공간으로 공식적으로 장난스럽게 만든 모듈일 경우 이 이름공간 하부에 만들 것을 권장하고 있습니다. CPAN의 Acme::SaBalTongMun 모듈을 써보죠. sabal.pl 스크립트는 다음과 같습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
use Acme::SaBalTongMun;
 
my $sabal = Acme::SaBalTongMun->new(
    radius    => 50,
    font_size => 30,
    font      => '/Library/Fonts/Arial.ttf', # Your Favorite Font
    color     => '#000000',
    people    => [ map { '@'.$_ } @ARGV ],
);
 
my $image = $sabal->generate;
binmode STDOUT;
print $image->png;

자, 이제 우리의 분노를 보여봅니다! 동지들이여!! 모이시오!!

1
2
3
$ perl sabal.pl \
    keedi aer0 perlstudy saillinux aanoaa \
    y0ngbin eeyees ainvyu gypark > sabal.png

그 결과 아래처럼 동지들이 뜻을 모았습니다.

사발통문 그림

Whisper : 주모자는 @keedi 입니다. 전 쁘락치 =3

슬픈소식 - @aer0

1
2
$ perl -MDateTime -le 'print DateTime->new(year=>2013,month=>2,day=>25)->delta_days(DateTime->now)->in_units("days")'
809

이런 우리에게 남은 희망은 - @aer0

1
2
$ perl -MList::Util=shuffle -le 'print "@{[(shuffle 1..45)[0..5]]}"'
34 23 43 2 44 15