A continuación está mi código (no se preocupe, hay un USUW en la parte superior del módulo)¿Alguien puede explicarme esta excepción de solo lectura?
Estoy probando si una matriz de referencia es de solo lectura, y si ese es el caso, entonces la estoy copiando en otra matriz ref. Las pruebas muestran que la matriz no es de solo lectura, sin embargo, cuando se ejecuta, falla con ese error. (Para aquellos que no estén familiarizados conmigo o Smart::Comments
--those ###
son Smart::Comments
.)
### readonly($arg_ref) : readonly($arg_ref)
### readonly(@$arg_ref) : readonly(@$arg_ref)
my @ro = map { readonly($_) } @$arg_ref;
### @ro
if (readonly $arg_ref) {
$arg_ref = [ @$arg_ref ];
}
return map { my $val = shift @$arg_ref;
$_ => $val
} @_
;
Ésta es la salida me sale:
### readonly($arg_ref) : 0
### readonly(@$arg_ref) : 0
### @ro: [
### 0,
### 0,
### 0,
### 0,
### 0
### ]
Pero aquí está el error:
Modification of a read-only value attempted at ....pm line 247.
(247 es:
return map { my $val = shift @$arg_ref;
)
¿Alguien tiene alguna familiaridad con este problema? Estamos ejecutando Perl 5.8.7. ¿Alguna idea sobre cómo abordarlo?
¿De dónde viene el símbolo 'readonly'? No creo que el módulo Readonly proporcione uno. – Ether
@Ether es ['Scalar :: Util :: readonly'] (http://search.cpan.org/perldoc?Scalar::Util#readonly) – Axeman
¿Cómo está' $ arg_ref' obteniendo su valor? –