■
package Man; use strict; use warnings; sub new{ my ($class,$param) = @_; my $self = bless {param=>$param},$class; } sub name{ my ($self) = @_; return $self->{param}{name} || ""; } sub friends{ my ($self) = @_; return $self->{param}{friends} || [] } sub hello{ my $self = shift; printf qq{hello world!! my name is %s\n},$self->name; } sub bye{ my $self = shift; foreach(@{$self->friends}){ printf qq{good bye %s!!\n},$_; } } sub add_friend{ my ($self,$friend) = @_; $self->{param}{friends},$friend; } 1
というライブラリがあれば、
use Man; my $fn7 = Man->new({ name=>"fn7", friends=>[qw(fn1 fn2 fn3 fn4 fn5)], }); $fn7->hello(); $fn7->bye();
という処理を行うことができる。利点は、処理をまとめてを外に出すことで、メインの処理内容がすっきりとした見通しになる。ちなみにオブジェクト指向で書くと、自然と外部にライブラリを作る習慣ができる。ただし、ライブラリpackage宣言とディレクトリの対応、そのディレクトリがライブラリサーチパスの中に入っていることを確認しておくべし。