モダン perl 入門以前
自分で調べたこと
package
文字通りパッケージ。クラス名として使う事もある。
おそらく以下のような使い分けのように思う(なんかあんまり詳しい説明が見当たらなかった)。
- Package::Method の形式で呼ぶ場合はパッケージ(Ruby で言うところの module相当)
- Package->Method の形式で呼ぶ場合はクラス(メソッドの第一引数にパッケージ名が代入される)
ライブラリパス
use とか require は @INC とやらのパスしか読んでくれないので、自前のライブラリ等、格納場所が別の場所の場合はロードパスを明示してあげる必要がある。
こんな感じで、 use lib PATH としてやる。
use lib "./"; usr hoge; hoge->method;
ただ、これだとパスが明示的になってしまって嫌だし、実行時のパスに依存してしまう。
だもんで、このように書く(perl のお作法的にどうなんだろう?)
# 既存パッケージ群 use File::Basename; : # 自作パッケージン群 use lib dirname(__FILE__); use hoge; hoge->method;
__FILE__ には実行したスクリプトのパスが入っているので、そこから dirname でディレクトリだけ抜き出すようにしている。
この例ではパッケージが実行スクリプト自身と同じディレクトリにある事が前提だったけど、例えば lib/ にあるような場合は以下のようにすれば良い。
use lib dirname(__FILE__) . "/lib";
定数について
use constant を使う。
use constant hoge => "ZZZ"; print hoge . "\n"; print "@{[hoge]}" . "\n";
普通の変数と同じような感じだけど、$ が付かない。また、ダブルクォートのリテラル内で使うには @{[xxx]} とする。
プライベートメソッド
慣例的に、先頭にアンダースコアを付けたメソッド名を付ける。実際にアクセス権限を付ける機構が組み込まれているかはよくわからん\(^o^)/
なんか private.pm なるものはあるみたいだが。
すぐ忘れることその1
.pm モジュールのように、別ファイルから読み込まれるファイルは最後に
1;
とする。よくわからないけれど、ファイルを正常に読み込まれた事を明示するらしい。ちなみに __END__ はファイルのこれ以上下は解釈してくれるな、という意味らしい。
すぐ忘れることその2
文末にはセミコロンが必要。