複数の定数クラス。
頭痛はなんとかアスピリンで誤魔化し
久々にドラム教室で、バシバシ叩く。
あー、楽しいけど、相変わらず下手だな、自分(笑)
そんな下手な自分は、悲しくもあるけど
下手な事にも頑張る自分を眺めるのも楽しいなぁ。
そんな訳で、無事帰ってきたものの、
自分の50m後ろを「頭痛さん」が
ヒタヒタ追っかけてきてる感じなので無理は禁物。
だけど、気になってまた複数の定数クラスの実装方法を検討。
いや、だから、無理は禁物なんだってばぁー…>自分
てな訳で、今度は「Net::Delicious::Constants」をパクる。
要は Constants/XXX.pm で定義した定数を
Constants.pm 内で、呼び出し元のスコープ内に
ちまちま設定してます。へい。
・Constants.pm
package Constants;use strict;
sub import {
my $self = shift;
my $constant = '';
my $useTagName = '';
my $targetPackageName = '';
my $caller = caller;
my $package = '';
no strict 'refs';
foreach $useTagName (@_) {
next if $useTagName !~ /^:(.*)/;
$targetPackageName = $1;
$targetPackageName =~ s/:://g;
$package = join("::",__PACKAGE__,ucfirst(lc($targetPackageName)));
eval "require $package;";
if ($@) {
warn $@;
next;
}
foreach $constant (@{$package."::EXPORT_OK"}) {
*{join("::",$caller,$constant)} = \&{join("::",$package,$constant)};
}
}
}
1;
・Constants/User.pm
package Constants::User;use strict;
use vars qw /@EXPORT_OK/;
@EXPORT_OK = qw/USER_ID COURSE_ID NAME_COLUMN/;
use constant USER_ID => 0;
use constant COURSE_ID => 1;
use constant NAME_COLUMN => 2;
1;
・Constants/Common.pm
package Constants::Common;use strict;
use vars qw /@EXPORT_OK/;
@EXPORT_OK = qw/TRUE FALSE/;
use constant FALSE => 0;
use constant TRUE => 1;
1;
・test.pl
#!/usr/bin/perl -wuse strict;
use lib '/home/anigon/constants';
use Constants qw(:user :common);
print FALSE."\n";
print NAME_COLUMN."\n";
exit;