La función readonly en Scalar::Util permite determinar si un argumento es una variable o un valor:
lhp@nereida:~/Lperl/src/testing$ cat -n readonly.pl
 1  use warnings;
 2  use strict;
 3  use Carp;
 4  use Scalar::Util qw(readonly);
 5
 6  sub ro {
 7    print "readonly($_[0])=".readonly($_[0])."\n";
 8    $_[0] = 'xxx';
 9  }
10
11  my $x = 4;
12
13  eval { ro($x) } or print $@;
14  eval { ro(-8) } or print $@;
15  eval { ro('lonely') } or print $@;
Cuando se ejecuta, el programa anterior produce una salida como:
lhp@nereida:~/Lperl/src/testing$ perl readonly.pl readonly(4)=0 readonly(-8)=8388608 Modification of a read-only value attempted at readonly.pl line 8. readonly(lonely)=8388608 Modification of a read-only value attempted at readonly.pl line 8.
Casiano Rodríguez León
