使い方

Perl Best Practices ネタ。
constant より Readonly の方が使い勝手が良い。

Readonly で宣言した変数は引数展開される

use strict;
use warnings;
use Readonly;

use constant NAME => q{cooldaemon};

Readonly my $SEX => q{man};

print "NAME $SEX?n";   # prints: NAME man

print <<"END_MESSAGE"; # prints: NAME man
NAME $SEX
END_MESSAGE

my %status_for_flag = (
    cooldaemon => 0,
    man        => 1,
);

print "flag = $status_for_flag{ NAME }?n"; # prints: flag = 
print "flag = $status_for_flag{ $SEX }?n"; # prints: flag = 1

スコープ制御できる

use strict;
use warnings;
use Readonly;

Readonly $GLOBAL => q{global};
Readonly my $MY  => q{my};

for (1..2) {
    Readonly my $COUNTER => $_;
    print "$COUNTER?n";
    $COUNTER = 10; # error
}

Scalar だけではなく Array や Hash も利用できる

use strict;
use warnings;
use Readonly;

Readonly my @ARRAY => ( 1, 2, 3, );
Readonly my %HASH  => ( key => q{value} );

use constant ARRAY_REF => [ 1, 2, 3, ];
use constant HASH_REF  => { key => q{value} };

$ARRAY[0]      = 4; # error
ARRAY_REF->[0] = 4; # not error

$HASH{ key }      = q{foo}; # error
HASH_REF->{ key } = q{foo}; # not error