[Perl] 変数名をエクスポートしたい(Readonly)

メモ。

* use constant使え。
* Exporterは関数専用だ。
* Readonlyじゃあくて、Attribute::Constantのほうがよくねえか?

test.pl



#!/usr/bin/perl

use TestM; TestM::import_vars;

print $var_a."\n";
print $var_b."\n";
print $var_c."\n";
$var_a = 2;

print $var_a."\n";


TestM.pm



package TestM;
use base (Exporter);

use Readonly;

Readonly our $var_a => 1;
Readonly our $var_b => 2;
Readonly our $var_c => 3;

sub func1 { print "here\n"; }

our @EXPORT = ( grep !/^(ISA|Readonly|BEGIN)$/io, keys( %{ *{TestM::} } ) );

sub import_vars {
my @c = caller;
foreach (grep /^var_/io, keys( %{ *{TestM::} })) {
Readonly ${*{"$c[0]::$_"}} => ${*{"TestM::$_"}};
}
}

1;




結果




$ perl test.pl
1
2
3
Modification of a read-only value attempted at test.pl line 8

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 0

この記事へのコメント

この記事へのトラックバック