Continue(s)

Twitter:@dn0t_ GitHub:@ogrew

表紙ははずいが役に立つ ~良書紹介「雅なPerl」~

「初めてのPerl」の第7版が今年の1月に出ていたらしい。

初めてのPerl 第7版

初めてのPerl 第7版


これこそまさしく「ザ・Perl入門書」ではあるとは思うけど、今日は「雅なPerl」という一風変わった本を紹介したい。

全体で200ページ程度の量で、難しい背景や言語の仕組みに関わる話はすっ飛ばしてPerlを使って如何に書きたいことを書くか、その方法が章立ててまとまっている。 (しかもラノベ調で)

初学者(あるいは基礎がガバガバな半端者=僕)みたいな人が分厚い参考書を手に取る前にサクッと読みながら時々写経してみるのにぴったりな本だと思う。

表紙から溢れ出る同人誌感はさておいて、この本はPerl入学式なんかでも立派な一参考資料として紹介されるくらい、その道の人も認めている本なのだ。

(本当に?)

github.com

ラクダ本やリャマ本と並べて紹介されてるぞ..!?

良い点

  • 雅が初学者目線で常に語ってくれるのでどこまでを一読で理解する必要があってどこからが応用(今後勉強していきましょうねー)な内容なのかがわかりやすい。

  • Perlが得意とする文字列操作、特に正規表現に関する解説が特に充実している。 今でもリファレンスとして時たまペラペラとめくる。

  • 200ページくらいでサイズもコンパクトで持ち運びしやすい。 まあ電子書籍が主流の現代において「重さ」「デカさ」はあまり重要視されないパラメータではありますが...。

悪い点

  • オブジェクト指向の説明に関しては12章まるまる使ってるとはいえPerlで、この短さで、なんとかしようとなるとやっぱり厳しい印象。

  • この表紙だと外出先で開きにくい。うぅ...試されている…。

  • 非売品

近くのPerl Mongerおじさんに持っていないか聞くのが吉。

ちなみに僕が持ってるのは第1版だけど第3版(Perl6の話とか追加)まであるらしい。
第2版の表紙が一番好き。

それから、この本に限ったことではないけどPerl後方互換性が強いので古い参考書でも全然現役で勉強になることがたくさん書いてある。

これが他の言語ではそうはいかない。
先週見たQiitaの記事がすでに過去の遺産だったりする。 きゃー大変。

まあPerlでもあんまり古い本とかサイトをみるよりは公式ドキュメント見ろよ、ってのはもちろん正論なんだけど。

kazhiramatsu.hatenablog.com

書評のようなもの ++ 雅なPerl入門 | koji_magi::*

Test::Mock::Guard ~テスト用にお手軽にstub化~

今日も今日とて、これまでなんとなくで使ってたモジュールを再度見つめ直す回です。

github.com

Test::Mock::Guardはテストで使えるモジュールとしてメジャーな模様。既存のクラス挙動を簡単にオーバーライドできる。

use strict;
use warnings;
use Test::More;
use Test::Mock::Guard qw/ mock_guard /;

package Discord;

sub new { bless {} => shift; }
sub solo { "長濱ねる"; }

package main;

{
    my $guard = mock_guard "Discord", +{
            solo    => sub { "平手友梨奈"; },
        };

    my $song0 = Discord->new;
    is $song0->solo, "平手友梨奈", "mock化されてる";
}

print "------(OUT OF SCOPE)--------\n";
my $song = Discord->new;
is $song->solo, "長濱ねる", "mock化されない";

done_testing;
〓 ~/perl_study
₍ ᕕ( ‘ω’)ᕗ⁾ $ prove -lvf discord.t
discord.t ..
ok 1 - mock化されてる
------(OUT OF SCOPE)--------
ok 2 - mock化されない

1..2
ok
All tests successful.
Files=1, Tests=2,  0 wallclock secs ( 0.02 usr  0.00 sys +  0.06 cusr  0.01 csys =  0.09 CPU)
Result: PASS

無駄にネストが深くならずに済む。

よく聞くスタブとモックの違いについて。

厳密に正しいかはあれですが、この記事が参考になりました。

perl-users.jp

スタブの場合は、それを利用する部分がテスト対象になります。

( 中略)

一方、モックの場合は、適用する部分そのものがテスト対象です。

( 中略)

ですので、今テストしたい部分がどこかを的確に認識できれば、 モックとスタブのどちらを使うのがよい状況なのかを判断できるようになります。

ちなみに最近よく聞く?Test2にもメソッドをモックしてくれる君としてTest2::Mockというのがあるみたいなんですがこいつだとモックしたメソッドを何回呼ばれたかを知るcall_count同等の機能がない様子。

techblog.kayac.com

Test2についてはまた記事を書きたいと思います。

参考記事

mihyaeru21.hatenablog.com

blog.yuuk.io

d.hatena.ne.jp