モジュールを作ってみる

さて、さっそくですが、制作にとりかかりましょう。

まず、現在使っているファイルは、

  • kaizoku.pl #メイン処理
  • robin.pl #パッケージやライブラリを書いてある

ですね。
約束事ではパッケージ名とファイル名を揃えろ!と書いてあったので、
robin.plを「Mugiwara.pm」と変更します。

そして、Mugiwara.pmの先頭に、

package Mugiwara;

と書きます。これでこのモジュールの名前が決まりました。

では次に中身に移ります。

モジュールの作る際の基本的な書き方です。

package パッケ−ジ名;
BEGIN{}
    各種処理
return 1;
END{}

こんな感じになります。
これに従って書き直してみると。。。

package Mugiwara;

BEGIN {
	use Exporter; #モジュール内の変数やサブルーチンを外へ出すためのモジュール。
	@ISA = qw(Exporter);  #現在のモジュールでimportサブルーチンが
見つからない場合はEXPORTモジュールを探すよう指示
	@EXPORT = qw(&main);    #kaizoku.plで使いたいサブルーチンの
名前や変数名をここに書く
}
	
sub main {
my @onepiece2 = eastblue();
grandline(@onepiece2);
}

sub eastblue{
my @onepiece = ("rufy,zoro,sanji,nami,tyopper");
return @onepiece;
}

sub grandline{
my @onepiece3 = @_;
push(@onepiece3,"robin");
print @onepiece3;
}


return 1;

END{}

こんな感じになると思います。
ひとまず、全ての処理をモジュールの方にいれてしまいました。
簡単にいうと、これ一つで名前を変えたら十分動けるようにしたというわけです。
ただ、メイン処理

sub main {
my @onepiece2 = eastblue();
grandline(@onepiece2);
}

この部分はサブルーチンにしておきます。
メイン処理の方で呼び出す際に簡単なようにサブルーチンにしてみました。
サブルーチンにしなかったら動かないのかもしれませんが。

  • @EXPORT = qw(&main);

ここに、kaizoku.plで使いたいサブルーチン、または変数などを記述します。
複数ある場合は空白でくぎって記入します。


さて、次はkaizoku.plの方ですが、これは単純です。

#!/usr/bin/perl
use strict; #宣言されていない変数を使えないようにするモジュール
use Mugiwara; #さっき作ったモジュール

&main(); #Mugiwara.pmの中のサブルーチン

exit;

はい、これでおしまい。
&main();の部分は普通にサブルーチンを使うような記述方法でよいのです♪
簡単ですね〜♪

ひとまずこんな感じで動かしてみましょう。

結果

rufy,zoro,sanji,nami,tyopperrobin

おお〜!動きました!!!
すばらしい!!

まぁ、本にのってたことをそのまま書いてみただけなんですが、
それにしても動くとは!
ちょっと感動です。
でもこれはこれでまだまだ課題がありそうです。

MEMO++++++++++++++++++++++++
モジュール作成

package Module;
全部を読み込み
use モジュール名
サブルーチンだけ読み込み
use モジュール名 qw (サブルーチン名1,サブルーチン名2)

  • Mugiwara.pm
package Mugiwara;

BEGIN {
	use Exporter;
	@ISA = qw(Exporter);
	@EXPORT = qw(&main); #外に出したいシンボルをここに書く
}
	
sub main {
my @onepiece2 = eastblue();
grandline(@onepiece2);
}

sub eastblue{
my @onepiece = ("rufy,zoro,sanji,nami,tyopper");
return @onepiece;
}

sub grandline{
my @onepiece3 = @_;
push(@onepiece3,"robin");
print @onepiece3;
}


return 1;

END{}
  • kaizoku.pl
#!/usr/bin/perl
use strict;
use Mugiwara;

&main();

exit;