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 は通りますね。
まあ、プラグマではないのでしかたないのですが。


Perl Best Practices