Perl入学式2013年第5回より 〜練習問題の最終問題:前編〜
ここ数日、連日更新できてます。1月に入ると烈火の多忙に入りそうなので、それまでにペース(プログラミング体力&習慣)をある程度身につけてしまっておきたいですが・・どうでしょうか。
さて、ここ数回の更新では、東京だと去る12/8、大阪だと12/21ですか、あたりに開催されましたPerl入学式2013年度第5回の内容を、復習というか、まあぼくはそれに参加できなくて、年明けの補講に行きたいと思っているのでその意味では予習、をしています。
資料は、こちら。
workshop-2013-05/slide.md at master · perl-entrance-org/workshop-2013-05 · GitHub
で、その第5回に関する前回までの記事の流れはこちら。
- Perl入学式in東京第5回練習問題よりcalc_string.pl - draft
- Mojoliciousのインストール(Perl入学式2013-第5回より) - draft
- mapとgrep(Perl入学式2013-第5回より) - draft
- ついにPerlでオブジェクト指向 - draft
- ついにPerlでオブジェクト指向・いろいろ補足編 - draft
はい。んで、今日はその流れのほぼ、最後でしょうか。
こんな問題です。
https://github.com/perl-entrance-org/workshop-2013-05/blob/master/slide.md#%E6%9C%80%E7%B5%82%E5%95%8F%E9%A1%8C
最終問題
はい。ということで、順にやっていきます。
まあ、当然のことながら、というか、自習は一人でやっているので「ぶつかり稽古」はできないですね(笑)。できないですが、一人二役でやっていきます。
まず、「YAPC::year()」から「YAPC::day()」を作るところまで、一息にやってみます。
・・と、思ったんですが、今回はちょっと試したいことがありまして、前回までにあらかたモジュールの作り方の基礎を見てきたので、ちょいステップアップして、『雅なPerl入門』に掲載されていた「Minilla」で作ってみようかなと。
Minillaについては、こちら。
https://github.com/tokuhirom/Minilla
http://blog.64p.org/entry/2013/05/14/080423
http://perldoc.jp/docs/modules/Minilla-v0.6.4/lib/Minilla.pod
http://yellowstore.blogspot.jp/2013/05/perlminilla.html
『雅なPerl入門』についてはこちらをご参照ください。
http://kazhiramatsu.hatenablog.com/entry/2013/08/07/132842
http://blog.nobers.com/entry/2013-10-14-01.html
http://tsucchi.github.io/perl/2013/09/21/miyabina_perl/
インストールの仕方の詳細などは割愛しますが、まあ普通に
$ cpanm Minilla
としまして、その後、任意の場所に
$ minil new YAPC
としました。
すると、「YAPC」というディレクトリが出来て、その中に「lib」や「t」その他のファイルやディレクトリが出来て、「lib」の中に「YAPC.pm」が出来ると。
そこまで大体・・実行から数秒でしょうか。何が起こってるのかはほぼ一切わかりませんが、でも便利というかラクだな、と思いました。
何が起こってるかは、おいおい分かりたいと思っています。
で、あらためてその「YAPC.pm」を使って、上記の問題にぶつかりたいと思います。
とりあえず、こんな感じで・・
package YAPC; use 5.008005; use strict; use warnings; our $VERSION = "0.01"; sub year { return 2014; } sub month { return 8; } sub day { return 28; } 1;
冒頭の2行、および「our $VERSION = "0.01";」というのは僕には(というかPerl入学式の資料的には)見慣れないのですが、見慣れないなりに、そのままにしています。
で、それを処理するファイル「practice.pl」を新たに、「YAPC」ディレクトリ内に(libディレクトリやtディレクトリと同階層)作りました。
こんな。
#!/usr/bin/env perl use strict; use warnings; use YAPC; print "Year: ".YAPC::year()."\n"; print "Month: ".YAPC::month()."\n"; print "Day: ".YAPC::day()."\n";
はい。で、実行するとこんな感じです。エンター!
Year: 2014 Month: 8 Day: 28
はい、どうでしょうか。最後のDayについては、実際のYAPC開催予定日は28日〜30日までということだったので、その辺も反映した方がいいのかちょっと悩みましたが、問題の方で「2桁の整数で」とありましたので、ひとまず28日のみとしました。
さてここからが、ややというか結構というかかなり難関だったのですが。
一応できた気がするのでそのままザラっと書いていきます。
・・と思いましたが、結構ひとつのエントリーとしては十分な長さな気もするので、明日に回す感じにしようかな・・ここから最後まで書くのもそれなりに時間使いそうだし・・
ということで、一旦ここまでにします。次回をお楽しみに!