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 環境などで変数が永続化するのを忘れていじっていると,どんどん変更されてしまっていやん,などのときに使えるかも。