#!/usr/bin/perl
use strict;
use warnings;
my @a = qw/a b c/;
(@a) x= 3;
print join(", ", @a), "\n";
mi aspetterei che il codice di cui sopra per stampare "a, b, c, a, b, c, a, b, c\n"
, ma invece muore con il messaggio:Perché viene visualizzato un errore quando provo a utilizzare l'operatore di assegnazione di rettifica con un array?
Can't modify private array in repeat (x) at z.pl line 7, near "3;"
Questo sembra strano perché il X <op>= Y
sono documentate come equivalente a X = X <op> Y
, e il seguente codice funziona come mi aspetto che:
#!/usr/bin/perl
use strict;
use warnings;
my @a = qw/a b c/;
(@a) = (@a) x 3;
print join(", ", @a), "\n";
si tratta di un bug in Perl o sto equivoco che cosa dovrebbe accadere qui?
Sì, ci ho provato solo perché sto documentando tutti gli operatori (github.com/cowens/perlopref) e stavo testando la mia assunzione ingenua di cosa avrebbe dovuto fare. –
Non penso che lo definirei un bug, dal momento che il manuale di Perl 4 menziona esplicitamente che funziona solo su scalari: http://www.cs.cmu.edu/afs/cs.cmu.edu/Web/Persone/rgs/pl-exp-op.html # x – mercator
@mercator Questo non è il manuale di Perl (che sarebbe o il Cammello o qualcosa accessibile da 'perldoc'). Il fatto che documenti lo stesso comportamento non significa che il comportamento non sia un bug. Vedi http://perldoc.perl.org/perlop.html#Assignment-Operators per la documentazione corrente (5.10.1). –