Hatena::ブログ(Diary)

サンプルコードによるPerl入門 このページをアンテナに追加 RSSフィード

  サンプルコード中心のPerlの入門サイトです。現代的なPerl(v5.8.1以降)の書き方に準拠しています。モダンPerlを効率よく体系的に学習することができます。社内での勉強会や講習のテキストとしてもお使いください。またPerlの初学者の方にもぜひ教えてあげてください。Perlは実用的、高速で、業務を大幅に効率化できる、とても優れたプログラミング言語です。ぜひお役立てください。

2012-02-07

Test::Moreで標準出力を抑制する方法

 Test::Moreの標準出力を抑制するには次のようにします。

my $builder = Test::More->builder;
open my $out_fh, '>', undef;
$builder->output($out_fh);
$builder->failure_output($out_fh);
$builder->todo_output($out_fh);

 ただたんにSTDOUTをundefに対してopenしてもだめで、Test::Builderオブジェクトの、標準出力を変更してあげる必要があります。

2012-02-06

cpanmを使って指定したディレクトリにCPANモジュールをインストールする

 cpanmを使って指定したディレクトrにCPANモジュールをインストールするには-Lオプションを使用します。

cpanm -L extlib DBIx::Custom

 カレントディレクトリのextlibというディレクトリにDBIx::Customがインストールされます。

2012-02-05

Test::ModuleVersionというモジュールを作っている

 Test::ModuleVersionというモジュールを作っている。

 Perlでモジュールのバージョン管理をやろうと思うと意外に難しい。たとえば、開発環境と本番環境でモジュールのバージョンはぜひあわせておきたいものだ。バージョンが異なることで、見えないバグが含まれていたり、後方互換性がなかったりする。だから、開発環境と本番環境では、すべてのモジュールのバージョンはあわせておきたいものだ。

 開発環境と本番環境でアーキテクチャがまったく同じ場合はモジュールの管理にgitを使うのが便利。でもアーキテクチャが違うとたとえば、同じバージョンのOSでも32bitと64bitなどの場合は、モジュールをそのまま移動させただけでは使えないものがある。XSを使って、つまりC言語を使ってコンパイルされたモジュールは、動かなくなるだろう。

 そして、実際に業務で必要になる場面にでくわした。それで、どんな解決方法がシンプルなのかということを、考えてみた。ひとつは、多くの人がいまチャレンジしようと試みている方法がある。それはローカル環境に、CPANのミラーを作成する方法。でもこれって意外と大変。そもそもCPAN自体がシングルバージョン管理システムなので、うまくやるためには、意外と難しいトリックが必要になったりする。

 それで僕が考えたのはこんな方法。

  1. 開発環境でインストールされているモジュールを調べて、モジュールのバージョンをチェックする自動試験を生成する。これで、この試験を本番環境に持っていけば、モジュールのバージョンの差分を自動試験によって確認することができる。
  2. 次にモジュールのバージョンが異なっていた場合は、ぜひともバージョンがあったモジュールをインストールしたい。そのURLがわかればうれしい。調査したところ、metaCPANのAPIをうまく利用すればできることがわかった。
  3. 最後のそれらのURLの出力をcpanmにパイプで流せば、開発環境とバージョンが一致したモジュールが本番環境にインストールされる。

 試してみたところ、これはかなりお手軽で有用性の高い方法だと感じている。それを実現するのが、Test::ModuleVersionだ。もう少し仕様と動きが安定したら、使い方を解説しようと思う。

2012-02-04

metaCPAN APIを利用してモジュールの情報を取得する

 モジュール名とバージョンを指定して、ファイルを自動的に取得するということは、今までのCPANだととても困難だったですが、metaCPANの登場によってこの状況は変わりそうです。変わりそうというのは、まだmetaCPANのAPIがベータバージョンだからですね。

 それでも、metaCPANのAPIは今でも便利です。APIはバージョンごとに管理されるようなので、後方互換性も保たれるような予感です。

情報の取得

 以下のようにして情報を取得できます。

 実際にアクセスしてみると、JSON形式で情報が返されます。download_urlを見てみると、実際にファイルのある場所のURLがわかります。

少しだけ解説

 これはWebAPIでJSON形式のデータです。qで検索条件を設定できます。nameがDBIx-Custom-0.2107のものを検索しています。fieldsで、取得したいデータの項目を指定することができます。これはカンマ区切りで指定することができるようです。

 またすばらしいことにmetaCPANという名前だけあって、CPANとBackPANにある両方の情報を統一的に扱うことができます。つまり、たとえCPANからディストリビューションが削除されたとしても、metaCPANを使えば、その情報にアクセスすることができます。

 metaCPANでCPANがさらに便利になる。最近ますます便利になってきているPerlですね。

2012-02-03

サブルーチンの再定義の警告を抑制する

 開発中にバグがあって、急遽修正しないといけないときは、モンキーパッチを当てることがときどきありますね。モンキーパッチというのは、サブルーチンやメソッドの定義を上書きして、正しい動きにしてあげることです。

 でもサブルーチンの再定義を行うと、警告が発生します。この警告を表示しないようにするにはredefine警告をとめるように、コンパイラに指示してあげます。

no warnings 'redefine';

 これで警告が表示されなくなります。これはレキシカルなスコープを持ちます。以下はモジュールのメソッドを上書きするサンプルです。

2012-02-02

イベント Perl Beginners #1

Perl Beginners #1

日時

日時 :2012/02/24 19:00 to 21:00
定員 :15 人
会場 :品川区五反田文化センター 第4会議室 (東京都品川区西五反田6丁目5−1)

概要

(上サイトより)

Perl Beginnersについて
いわゆる"勉強会"と呼ばれる類のイベントです。Perl初心者の方をターゲットにしております。

是非、Perl Beginnersのブログ もご確認ください。

参加費用について

イベントそのものは無料で参加いただけます。

二次会については、基本割り勘とさせていただく予定ですが、詳細が固まり次第、本ページを更新していきます。

ビギナーズセッション

Perl初心者(でなくても良いですが)に登壇していただいて質問して頂き、それに対して聴衆の方々が回答していく、という形式のセッションとなります。
時間が15分間割り当てられますので、その範囲内でご自由に質問・発表をしてください。

現在、ビギナーズセッションは発表者を募集しております。
発表してやっても良いよ!と言う方は、@ytnobodyまでご一報ください!

LT

5分間でPerlに関しての発表をしていただきます。
特にお題などは設けておりません。

現在、LT発表者を募集しております。
発表してやっても良いよ!と言う方は、@ytnobodyまでご一報ください!

参加はPerl Beginners #1から。

2012-02-01

Encode::UTF8Mac - Mac OS XのファイルシステムのエンコーディングUTF-8-MACを正しく扱う / Perlモジュール徹底解説

 Mac OS XはUTF-8をファイルシステムのエンコーディングとして採用していると思いきや、実は少し異なり、Mac OX X独自の仕様になっています。これを正しく扱うためにはEncode::UTF8Macというモジュールを利用すると簡単です。

use Encode qw/encode decode/;
use Encode::UTF8Mac;

# エンコード
my $byte = encode('utf-8-mac', $string);

# デコード
my $string = decode('utf-8-mac', $byte);

 useを使ってEncode::UTF8Macを読み込むと、Encodeモジュールのエンコーディングとしてutf-8-macを利用できるようになります。このエンコーディングを利用すれば、Mac OS Xのファイル名を正しく扱うことができます。

 Encode::UTF8Macを利用する方法は、Text::IconvなどのMac OS X独自の方法を利用しないで、標準的なEncodeモジュールを利用できるという点でおすすめです。