Top > MyPage
 

クラス(モジュール)の作り方

Module::Starter::PBPのインストール

bashを立ち上げて、

perl -MCPAN -e 'install Module::Starter::PBP'

で、途中一度yes/noを聞いていきますが、そのままリターン。それでおしまい。

Module::Starter::PBPの実行

perl -MModule::Starter::PBP=setup

を実行すると、名前やメールアドレスを聞いてきますが、それに答えると

Creating /home/chikkun/.module-starter/PBP...done.
Creating /home/chikkun/.module-starter/PBP/t...done.
Creating /home/chikkun/.module-starter/config...
Please enter your full name: Chiku Kazuro
Please enter an email address: chikkun@chikkun.com
Writing /home/chikkun/.module-starter/config...
done.
Installing templates...
        /home/chikkun/.module-starter/PBP/Build.PL...done
        /home/chikkun/.module-starter/PBP/Makefile.PL...done
        /home/chikkun/.module-starter/PBP/README...done
        /home/chikkun/.module-starter/PBP/Changes...done
        /home/chikkun/.module-starter/PBP/Module.pm...done
        /home/chikkun/.module-starter/PBP/t/pod-coverage.t...done
        /home/chikkun/.module-starter/PBP/t/pod.t...done
        /home/chikkun/.module-starter/PBP/t/perlcritic.t...done
Installation 

とうようなメッセージと共に終了します。実際に

.module-starter
├ PBP
│ ├ t
│ │ ├ perlcritic.t
│ │ ├ pod.t
│ │ └ pod-coverage.t
│ ├ Build.PL
│ ├ Changes
│ ├ Makefile.PL
│ ├ Module.pm
│ └ README
└ config

というディレクトリーやファイルが出来ています。

実際はこれらが一種のテンプレートになるので、今後使い続けるなら、Module.pmなどを書き換える必要がある。いずれにしろテンプレートだけでは困るので、次に進む。

Module::Starterの実行

上記の

Module::Starter::PBPをインストールした際に、Module::Starterは既にインストール済み。なので、同様にbash上で実行。

ただし、これでは実際利用するモジュールのファイルやディレクトリーが作成されるので、モジュールを作成するワーキングディレクトリーを作成して、そこで作業をしよう。仮に、~/perlをワーキングディレクトリーにすると(そのディレクトリーがもしないなら)、

$ cd
$ mkdir perl
$ cd perl
$ module-starter --module=DUM::Utils::CSVReader

と実行すると(上の例ではDUM::Utils::CSVReaderというモジュールを作成している)

Created starter directories and files

というメッセージと共にperlのディレクトリー以下に

DUM-Utils-CSVReader
├ lib
│ └ DUM
│    └ Utils
│       └ CSVReader.pm
├ t
│ ├ 00.load.t
│ ├ perlcritic.t
│ ├ pod.t
│ └ pod-coverage.t
├ .cvsignore
├ Build.PL
├ Changes
├ Makefile.PL
├ MANIFEST
└ README

というようなファイルやディレクトリーが出来ている。そして、編集するファイルは

DUM-Utils-CSVReader
├ lib
│ └ DUM
│    └ Utils
│       └ CSVReader.pm

です。それ以外のファイルは必要に応じて、テストをする場合などに利用します。

Class:Stdのインストール

前と同様に、bash上で

perl -MCPAN -e 'install Class::Std'

でインストール終了。インサイドアウトクラスについての詳細は変数のスコープからインサイドアウトクラスまでを参照のこと。

CSVReader.pmの編集

__END__

以下のPOD部分を省略すると、現在CSVReader.pmの内容は

package DUM::Utils::CSVReader;

use warnings;
use strict;
use Carp;

use version; $VERSION = qv('0.0.3');

# Other recommended modules (uncomment to use):
#  use IO::Prompt;
#  use Perl6::Export;
#  use Perl6::Slurp;
#  use Perl6::Say;


# Module implementation here


1; # Magic true value required at end of module

となっています。とりあえず、いらない行を削除して、

package DUM::Utils::CSVReader;

use warnings;
use strict;
use Carp;

use version; $VERSION = qv('0.0.3');


1;

にします。さて、Class::Stdを利用するために、

package DUM::Utils::CSVReader;

use warnings;
use strict;
use Carp;
use version; our $VERSION = qv('0.0.3');
use Class::Std;
{
    my %file     :ATTR( :name<file>);


    sub getCSVArray {
      my $this  = shift;
      my $file_name = $file{ident $this};
        #.....
    }

}

1;

とします。これで既に(testCSV.plという実行ファイルだとして)、

use strict;
use warnings;
use Carp;
use lib qw(/home/chikkun/perl/DUM-Utils-CSVReader/lib);
                #############環境に合わせて、変更が必要かも
use DUM::Utils::CSVReader;

my $csv = DUM::Utils::CSVReader->new({file => "filename.csv"});

my $file = $csv->get_file;

print $file, "\n";

を実行すれば、

$ perl testCSV.pl
filename.csv

のように表示できます。インサイドアウトオブジェクトで注意すべきは、

my %file     :ATTR( :name<file>);

により、必ずnewする際(別の実行ファイルで)にファイル名を

my $csv = DUM::Utils::CSVReader->new({file => "filename.csv"});

のように指定しないとエラーになる点とそのファイル名にアクセスするには

my $file_name = $file{ident $this};
                      ^^^^^^^^^^^^

のように、ident $thisを指定するぐらいです。

[2007-02-21 09:40]