このすみノート

Webエンジニアが技術や趣味を書くブログです。

雅なPerl入門で学ぶ現代Perl - 再学習でPerlの知識をアップデート

BOOTHで購入した「雅なPerl入門第3版」がおもしろかったので、一気読みしました。

booth.pm

本書が読みやすい理由は、プログラミング初心者の雅とPerlハッカーであるクロウの、会話形式で物語が進んでいくからです。個人的には、プログラミングの経験はあるけどPerlは未経験の人に、ちょうど良いレベル感だと感じました。

読み終えましたので、感想などつらつらと書いていきます。

目次

Perlを知る

Perlは、プログラマの三大美徳でも有名なLarry Wallが作ったスクリプト言語です。RubyもPerlの影響を受けていて、「Perlより強力なオブジェクト指向な言語が欲しくて作った」と言われています。

TMTOWTDI

「TMTOWTDI」とは、"There's More Than One Way To Do It."の略です。やり方はひとつじゃないという意味で、Perlは自由度が高いプログラミング言語です。

私が社会人になって、はじめて業務で触ったプログラミング言語がPerlでした。自由度の高さによる試行錯誤が楽しくて、病みつきになりました。

また、プログラマの実力がダイレクトに反映される言語であり、使い慣れるとコンパクトに記述することもできます。

CPAN

Perlの特徴といえば、やはりCPANです。世界各地のCPAN Authorがメンテナンスしているモジュールがたくさんあり、業務ではCPANモジュールを活用してコーディングすることが多いです。

The Comprehensive Perl Archive Network - www.cpan.org

コミュニティ

Perlには「◯◯.pm」というコミュニティがたくさんあります。北はHokkaido.pmから、南はOkinawa.pmまで。

先日YAPC::Tokyoに参加してきたのですが、とくにOkinawa.pm勢の勢いはすごかったです。年齢層が若いので、元気の格が違いました。

hokkaido.pm.org

okinawapm.connpass.com

本書の感想

プログラミング初心者の雅が、Perlハッカーであるクロウに質問をしながら話が進行します。会話形式で進行するので、とても読みやすかったです。

ページ数も220ページを超えていて、本書は同人誌ですが商業誌といっても差し支えないのないクオリティです。ただし広範囲をカバーしているため、駆け足な点もあります。なんらかのプログラミング言語の経験者が、Perlを知る用途に向いていると感じました。

あと表紙が恥ずかしい技術書なので、自宅以外で読むのは勇気がいるかもしれません(^^;

f:id:konosumi:20190211133920j:plain

f:id:konosumi:20190211133944j:plain

章の構成

  1. プロローグ
  2. Perlを知ろう
  3. Perlの開発環境を整えよう
  4. スカラー
  5. 配列とリスト
  6. ハッシュ
  7. サブルーチン
  8. コンテキスト
  9. 正規表現
  10. リファレンス
  11. CPAN
  12. パッケージ
  13. モジュール
  14. オブジェクト指向
  15. テスト
  16. ファイル入出力
  17. 文字エンコーディング
  18. CPANモジュールガイド
  19. Perl6入門

なぜPerlが好きなのか?

今まで触ってきたプログラミング言語の中では、私はPerlが好きです。なぜなのか考えてみたのですが、以下のような細かい点が気に入ってます。

unlessによる否定の肯定形判定

unlessは、ifの反対の判定をします。下記の例では、「$a == 2」でなければ処理をしてくださいという意味になります。

my $a = 1;

unless ($a == 2) {
    print 'a is not 2';
}

このように、Perlでは「!=」などの否定形を使わなくても判定ができるので、肯定形の判定だけを中心にして書くことができます。

myによるレキシカルスコープがある

Perlはスクリプト言語ですが、レキシカルスコープがあります。レキシカルスコープによって、変数の生存範囲を制限できます。

if (1) {
    # 変数のスコープを限定することができる
    my $a = 1
}

# Warning: something's wrong at ...
warn $a;

変数のスコープは、やっぱり柔軟に制限できると便利です。

後置ifと後置unlessによる判定

Perlのifとunlessは、文の最後に書くことができます。プログラムは極力行数を少なくしたい派の私にとっては、とても嬉しい機能です。

my $a = 1;
# ifが後にくる
print 'a is 1' if ($a == 1);

# unlessが後にくる
print 'a is not 2' unless ($a == 2);

正規表現に強くなる

Perlというプログラミング言語の目玉は、やはり正規表現です。テキスト処理を柔軟にできるようにする考えのもと、Perlは言語レベルで正規表現をサポートしています。専用の演算子「=~」まであります。

正規表現が苦手なプログラマは多いのですが、私ははじめて使った言語がPerlだったので、苦手意識を持たないまま最初に覚えることができました。

さいごに

AWS LambdaではPerlがサポートされていなかったりと、サーバーレスまで見据えてしまうと難しいところがありますが、まだまだPerlは現役です。

新規プロジェクトで採用されることは少ないかもしれませんが、Perlのシステムを保守することになったエンジニアが、新たにPerlを勉強するなら「雅なPerl入門」はオススメです。

Perlでは、Larry Wallが書いたラクダ本と呼ばれるオライリーの「プログラミングPerl」を読むのが定石ですが、15年以上前に書かれた本です。

「雅なPerl入門」は、新しいPerlをベースに書いてありますので、ぜひ読んでみてください。2018年に第3版2刷が発行されたみたいで、私はBOOTHで買いました。

booth.pm