1.21 定数を宣言する

変数に設定した値を変更できないようにしたい。

# 展開できるスカラー変数にする必要がない場合
use constant AVOGADRO => 6.0225e23;
printf "You need %g of those for guac\n", AVOGADRO;

# スカラー変数にする必要がある場合
*AVOGADRO = \6.0225e23;
print "You need $AVOGADRO of those for guac\n";

# もっとも安全な方法
package Tie::Constvar;
use Carp;
sub TIESCALAR {
  my ($class, $initvar) = @_;
  my $var = $initval;
  return bless \$var => $class;
}
sub FETCH {
  my $selfref = shift
  return $$selfref;
}
sub STORE{
  confess "Meddle not with the constants of the universe";
}