skillup

技術ブログ

Perl

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

投稿日:2016年4月18日 更新日:

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

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

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

名前空間とPackage

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

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

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

package Point

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

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

コンストラクタ

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

Perlゼミ コンストラクタの作成より

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

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

簡単!オブジェクト指向Perl [1] パッケージ

use / use base

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

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

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

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

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

そのほかの参考リンク

Perl のクラスって個性的ですね!(生で見えるオブジェクト指向)
業務に役立つPerl
Perlオブジェクト基礎文法最速マスター
Perl の use と require の違い

-Perl
-

執筆者:


comment

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

関連記事

no image

Perlでの日付処理

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

no image

大容量データの取り込みについて

普段プログラムを組むときには可読性や保守性が大事なポイントになりますが、それと同じぐらい速度やメモリ効率なんかも大事です。 今回は少ないメモリでもなんとかできるような工夫をちょっとかいていこうかなと思 …

no image

Perl整形ツール Perl Tidy

PHPでコード整形ツールを使いましたが、Perlでも整形ツールがあったのでちょっとメモ。 Perl::Tidyというモジュールです。 公式 http://perltidy.sourceforge.ne …

no image

Basic認証のあるページの情報の取得

ひさびさにPHPネタです。 PHPではWEBページを保存するときにfile_get_contents(url)と書いてあげるとHTMLデータを取得できます。 が、Basic認証などのページは当然fal …

no image

Perlの配列、ハッシュ系の処理(grepを中心に)

Perlの配列やハッシュで便利そうな処理をgrepを中心にいろいろ調べてみました。 Contents1 grepとは?2 grepを使った配列処理 基本3 grepを使った配列処理 ハッシュを含む多次 …