Detectando si un Argumento es de Escritura

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
Licencia de Creative Commons
Principios de Programación Imperativa, Funcional y Orientada a Objetos Una Introducción en Perl/Una Introducción a Perl
por Casiano Rodríguez León is licensed under a Creative Commons Reconocimiento 3.0 Unported License.

Permissions beyond the scope of this license may be available at http://campusvirtual.ull.es/ocw/course/view.php?id=43.
2012-06-19