Recent Perl World 第5回 メモ


最近、プログラムで使うデータを管理するのが面倒になってきて、Windows上にMySQLをインストールしてみた。

これまで作ったプログラムをDBに対応させなくちゃな、と、とりあえずはid:naoyaさんの執筆されているWEB+DB PRESS vol.36のRecent Perl World第5回のDBIx::Classの記事を参考にO/Rマッパをお勉強。

ついさっきサンプルプログラムのgetting_first.plの動作を確認しました。
そこで、getting_first.pl動作までで初心者がつまづきそうな箇所(というか、自分がつまづいた箇所w)&解説をメモとして残しておきます。

DSNってなんじゃい

DSNとはData Source Nameのこと。
そうなると、

__PACKAGE__->connection('dbi:mysql:bookmark', 'username', 'password')

の'bookmark'という言葉の意味するのはテーブル名ではなく、使用データベース名。
よく考えれば、mysql、と来ればその次はデータベース名ですね。
テーブル名は先行することはない、と。

"use lib"ってなんじゃい

このuse libってのは、使用するライブラリが何処にあるかを教えています。"use lib qw(hoge fuga)"では、hogeとfuga以下にライブラリがあることを教えています。
getting_first.plの例では

use lib qw(./lib);

とありますが、これはカレントディレクトリに含まれるlibディレクトリ以下に使用ライブラリがありますよー、と教えています。

具体的には、インクルードされるファイルのあるディレクトリを示す@INC変数に、libプラグマで指定されたディレクトリを追加しているのですね。
INCってのはINCludeのこと。
ためしに、perlの特殊変数である@INC変数を表示させてみましょう。

C:\00work\00practice\PerlWorld>perl
print "@INC";
^Z
C:/Perl/site/lib C:/Perl/lib . ←実行結果

…と、結果からデフォルトでインクルードされているディレクトリは"C:/Perl/site/lib" と "C:/Perl/lib"であることがわかります。

さらにuse lib qw(./lib)としてみて、@INCを表示させてみましょう。

C:\00work\00practice\PerlWorld>perl
use lib qw(./lib);
print "@INC";
^Z
./lib C:/Perl/site/lib C:/Perl/lib . ←実行結果

如何でしょうか?
"C:/Perl/site/lib" と "C:/Perl/lib"以外にも、ちゃんと"./lib"ディレクトリが追加されていますね。

Perlにおける'::'の意味

この記号、Perl使いならしょっちゅう見かけるものと思います。
getting_firstサンプルプログラムを動作させるのに使用している、App::Schema::Userパッケージの"User.pm"ファイルを例にとって説明します。
まず最初ヒントを。このUser.pmのパスは"(略)\App\Schema\User.pm"となります。
package App::Schema::User をUser.pmとして作成するのなら、User.pmはApp\Schemaディレクトリに含まれる必要があるのですね。
この'::'の記号はディレクトリとファイルの包括関係を示しているとでもいいましょうか。

たとえば、Data::Dumperモジュールは何処にあるでしょう?
調べてみると、きっと'::'をよく理解できることと思います。