skillup

技術ブログ

Perl

Perlにおけるオブジェクト指向

投稿日:

今回はPerlのオブジェクト指向について。

Javaほどの厳密性はありませんが、Perlでもオブジェクト指向的なプログラミングを行うことは可能です。

今回はPerlのオブジェクト指向をさらっと基本的な部分(名前空間、コンストラクタ、継承)だけ見ていきたいと思います。

名前空間とPackage

プログラミングでは規模が大きくなってくると変数名や関数名がかぶってしまうことが見られます。

これが重要な変数だった場合、意図しない上書きなどをしてしまう可能性があります。そのために同じtitleという変数名であっても”どの”titleなのかということを明記しておく必要があります。

この”どの”に当たる概念が名前空間であり、perlではこれを下記のように書きます。

package Point

こうしておくとPointのtitleということを明記できますので、変数名の衝突を防ぐことができます。

階層が複雑な場合は、package Foo::Bar::Pointなどともかきます。

http://www.geocities.jp/bleis_tift/cpp/namespace.html

コンストラクタ

Perlではコンストラクタの概念が難しいです。

http://d.hatena.ne.jp/perlcodesample/20090317/1237125522より

上記のコードの場合 下記のような流れになります。

  1. インスタンス生成時、$classはクラス名を受け取る
  2. 無名のハッシュが$selfの参照先になる(初期値が空という意味。)
  3. return blessにより無名のハッシュがクラス名をつけられて、クラスオブジェクトとなる

http://www15.plala.or.jp/h-kihara-home/prog/ooperl.html

use / use base

Perlでは他のモジュールを利用するときはuse パッケージ名として使用することが一般的です。(拡張子がpmじゃないと呼べません)

また継承を行うときはuse baseとして呼び出します。

http://d.hatena.ne.jp/perlcodesample/20130305/1362489739

初期値があるインスタンス生成は下記のように作成します。

似たようなファイルの読み込みにrequireがありますが、下記のような点が違います。

  •  useはコンパイル時に評価、requireは実行時に評価

そのほかの参考リンク

http://qiita.com/tadnakam/items/485fe6fd1cf79f3cb97c
業務に役立つPerl
http://d.hatena.ne.jp/chaichanPaPa/20100206/1265436393
http://iandeth.dyndns.org/mt/ian/archives/000592.html

-Perl
-

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

Perlの文字コードについて その3

実際のPerlでの文字処理に関しては以前の記事でも書いたように下記の原則を守ればOKです。  原則1 外部から入力された文字列はデコードして内部文字列に変換する  原則2 外部へ出力する文字列はエンコ …

no image

Vagarant+Eclipse(Perl)での作業環境構築

現在の案件でPerlの改修があるんですが、windowsだとモジュールの依存関係でうまくコンパイルできなかったりといろいろとトラブルが起こったんで、今はやりの仮想環境でやることに。 まだ完ぺきではない …

no image

Perlでの日付処理

Perlで翌月の月末を求め、yyyyMMddで表示する計算があったので対応。 知識がなかったんで何気にちょい時間がかかりました。PerlではこのDateTimeというライブラリがよさげ。 [crayo …

no image

Perlでの変数、配列、ハッシュに関して ~リファレンスなど~

こちらのブログでプログラミングを教えてるんですけど、プログラミングの基本といえば配列とオブジェクト指向だと思います。 もちろん、これ以外のことも大切ですが、初心者のうちはここを抑えておけばとりあえず何 …

no image

Perlでのデータベース差分チェックツール

Perlにてデータベースの差分が発生したときに簡単に差分を埋めるためのSQLを書くライブラリがあったので紹介。 ライブラリがない場合、cpan SQL::Translator でまずライブラリをCPA …