package の区切りは::(ダブルコロン)です
package Some::Module;
ファイル最後の評価値は真であることが必要です
package Some::Module; # ➡ Some/Module.pm
use strict;
use warnings;
1;
名前からパス・ファイル名を判別して,ファイルが読み込まれます
use Some::Module;
prove コマンドを使ってテストを実行します
$ cd practice/01_module
$ prove -lv t/01_basic.t # テストファイル単体
$ prove -lv t/ # ディレクトリ以下まとめてテスト実行
通常の関数と同じく sub
で定義します
package Some::Module;
sub hello{ 'Hello, perl world' }
1;
クラスメソッドです
Some::Module::hello();
$self
で受け取るのが慣習
sub hello_oo {
my $self = shift;
return 'Perl oo world';
}
オブジェクトに対してアロー演算子(->)を使って呼び出す
use Some::Module;
my $module = Some::Module->new;
$module->hello_oo; # 'Perl oo world'
bless
でリファレンスにpackage名を結びつけてオブジェクトにしますPerlの慣習では new
を使う
package Some::Module;
use strict;
use warnings;
sub new {
my $class = shift;
bless +{}, $class;
}
1;
$class
にはmoduleの名前が入っているbless
でリファレンスをpackage名と結びつけることでオブジェクトになるここでは空のハッシュリファレンスをオブジェクト化して返しています
sub new {
my $class = shift;
bless +{}, $class;
}
メソッドと同じです
use Some::Module;
my $module = Some::Module->new;
だから第1引数にクラス名やオブジェクトを受け取る
$hash_ref->{name};
$array_ref->[0];
$sub_ref->($params);
my $module = new 'Some::Module';# Some::Module->new
hello_oo $module; # $module->hello_oo
モジュールの管理ツール
$ plenv install-cpanm
アプリケーションの依存モジュール管理ツール
$ cpanm Carton
モジュールオーサリングツール
$ cpanm Minilla
$ plenv rehash
$ cd practice
$ minil new MyPSGIApp
$ cd MyPSGIApp
cpanfile
に追記しますpsgi アプリを作るのに必要なモジュールを記述
requires 'Plack';
$ carton install
app.psgi
はPlackサーバの標準のpsgiファイル use strict;
use warnings;
sub {
[
'200',
[ 'Content-Type' => 'text/plain' ],
['Hello, Plack/PSGI world!']
]
};
port5000を使えれば指定の必要は無いです
$ carton exec plackup -r -p 5000
$ open http://localhost:5000/
requires 'Plack::Builder';
requires 'Plack::Middleware::Debug';
use strict;
use warnings;
use Plack::Builder;
builder {
enable 'Debug';
sub {
[
'200',
[ 'Content-Type' => 'text/html' ],
['<html><body>Hello, Plack/PSGI world!</body></html>']
]
}
};
Use a spacebar or arrow keys to navigate