モジュールを作ってみる
さて、さっそくですが、制作にとりかかりましょう。
まず、現在使っているファイルは、
- 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++++++++++++++++++++++++
モジュール作成
- 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;