Readonly は別に定数のためだけじゃなくても使える
変更不可能な変数を作るには Readonly というモジュールが使えます。スピードに関してネガティブなことが書いてあるのですが,気になる向きは Readonly::XS を「追加で」インストールすると自動的にそちらが使われるようになります。
通常は,定数などを表現するのに使ったりしますが,
#!/usr/bin/perl use strict; use Readonly; { my $hash = { msg => 'hello, world' }; sub fetch { Readonly::Scalar my $r => $hash; $r; } } my $r = fetch(); $r->{msg} = 'konnnichiwa';
などのようにすると,きちんと「Modification of a read-only value attempted」と怒られます。mod_perl 環境などで変数が永続化するのを忘れていじっていると,どんどん変更されてしまっていやん,などのときに使えるかも。