Ci-dessous mon code (ne vous inquiétez pas, il y a un USUW en haut du module)Quelqu'un peut-il m'expliquer cette exception en lecture seule?
Je teste si une référence à un tableau est en lecture seule, et si tel est le cas, alors je suis le copier dans un autre tableau ref. Les tests montrent que le tableau n'est pas en lecture seule, mais lorsqu'il s'exécute, il échoue avec cette erreur. (Pour ceux qui ne connaissent pas avec moi ou Smart::Comments
--those ###
sont 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
} @_
;
Ceci est la sortie que je reçois:
### readonly($arg_ref) : 0
### readonly(@$arg_ref) : 0
### @ro: [
### 0,
### 0,
### 0,
### 0,
### 0
### ]
Mais voici l'erreur:
Modification of a read-only value attempted at ....pm line 247.
(247 est:
return map { my $val = shift @$arg_ref;
)
Quelqu'un connaît-il ce problème? Nous utilisons Perl 5.8.7. Une idée sur la façon de l'aborder?
D'où vient le symbole 'readonly'? Je ne pense pas que le module Readonly en fournisse un. – Ether
@Ether c'est ['Scalar :: Util :: readonly'] (http://search.cpan.org/perldoc?Scalar::Util#readonly) – Axeman
Comment' $ arg_ref' obtient-il sa valeur? –