Readonlyモジュールを遊んでみる
Perl Best Practicesを読んでて、
Readonlyモジュールなるものを知った。
http://search.cpan.org/~roode/Readonly-1.03/Readonly.pm
簡単に言えばuse constantの便利版かな。
Perl Best Practicesでは
use constantよりも
use Readonlyすることを推奨してます。
以下、理由&簡単なソース
Readonlyモジュール使用時
#! /usr/bin/perl
use strict;
use warnings;
use Readonly;
Readonly my $name => q[nekokak];
Readonly my $age => q[27];
print <<"__EOD__";
Hi!
My name is $name.
My age is $age.
Bye.
__EOD__
こんな感じで書けます。
結果
Hi!
My name is nekokak.
My age is 27.
Bye.
こんなのが出力されます。
use constantの場合
#! /usr/bin/perl
use strict;
use warnings;
use constant name => q[nekokak];
use constant age => q[27];
print <<"__EOD__";
Hi!
My name is name.
My age is age.
Bye.
__EOD__
こう書くと、
Hi!
My name is name.
My age is age.
Bye.
こんな出力になります。
なので、以下のように書く必要があります。
#! /usr/bin/perl
use strict;
use warnings;
use constant name => q[nekokak];
use constant age => q[27];
print 'Hi',"\n\n";
print 'My name is ',name,".\n";
print 'My age is ',age,".\n\n";
print 'Bye.';
結果
Hi
My name is nekokak.
My age is 27.
Bye.
書き方にもよりますが、なんて醜いのでしょうかねぇ。
どうです?Readonlyの方がよいですよね?
ちなみに、
Readonly my $name => q[nekokak];
としているものに、値を入れようとすると、、、
Modification of a read-only value attempted at readonly.pl line 9
こんな感じで実行時にエラーになります。
perl -c は通りますね。
まあ、プラグマではないのでしかたないのですが。