#!/usr/bin/perl
use strict;
use warnings;
my @a = qw/a b c/;
(@a) x= 3;
print join(", ", @a), "\n";
yo esperaría que el código anterior para imprimir "a, b, c, a, b, c, a, b, c\n"
, pero en su lugar se muere con el mensaje:¿Por qué aparece un error cuando trato de utilizar el operador de asignación de reptiles con una matriz?
Can't modify private array in repeat (x) at z.pl line 7, near "3;"
Esto parece extraño porque el X <op>= Y
están documentados como equivalente a X = X <op> Y
, y el siguiente código funciona como Lo espero:
#!/usr/bin/perl
use strict;
use warnings;
my @a = qw/a b c/;
(@a) = (@a) x 3;
print join(", ", @a), "\n";
¿Esto es un error en Perl o estoy malentendiendo lo que debería suceder aquí?
Sí, solo lo encontré porque estoy documentando todos los operadores (github.com/cowens/perlopref) y estaba probando mi suposición ingenua de lo que debería hacer. –
No creo que lo llamaría un error, ya que el manual de Perl 4 menciona explícitamente que solo funciona en escalares: http://www.cs.cmu.edu/afs/cs.cmu.edu/Web/People/rgs/pl-exp-op.html # x – mercator
@mercator Ese no es el manual de Perl (que podría ser el Camel o algo accesible desde 'perldoc'). El hecho de que documente el mismo comportamiento no significa que el comportamiento no sea un error. Ver http://perldoc.perl.org/perlop.html#Assignment-Operators para la documentación actual (5.10.1). –