#!/usr/bin/perl
use strict;
use warnings;
my @a = qw/a b c/;
(@a) x= 3;
print join(", ", @a), "\n";
spodziewałbym powyższy kod, aby wydrukować "a, b, c, a, b, c, a, b, c\n"
, lecz umiera z komunikatem:Dlaczego pojawia się błąd podczas próby użycia operatora przypisania gadów z tablicą?
Can't modify private array in repeat (x) at z.pl line 7, near "3;"
To wydaje się dziwne, ponieważ X <op>= Y
są udokumentowane za równoważne X = X <op> Y
i Następujący kod działa jak Spodziewam się, że:
#!/usr/bin/perl
use strict;
use warnings;
my @a = qw/a b c/;
(@a) = (@a) x 3;
print join(", ", @a), "\n";
Czy jest to błąd w Perlu, czy też nie rozumiem, co powinno się tutaj wydarzyć?
Tak, tylko ja wpadłem na niego, bo jestem dokumentowania wszystkich operatorów (github.com/cowens/perlopref) i testował moje naiwne założenie, co należy zrobić. –
Nie sądzę, bym to nazwał błędem, ponieważ podręcznik Perla 4 wyraźnie wspomina, że działa tylko na skalarach: http://www.cs.cmu.edu/afs/cs.cmu.edu/Web/People/rgs/pl-exp-op.html # x – mercator
@mercator To nie jest podręcznik Perla (który będzie albo Wielbłądem, albo czymś dostępnym z 'perldoc'). Fakt, że dokumentuje to samo zachowanie, nie oznacza, że zachowanie nie jest błędem. Zobacz http://perldoc.perl.org/perlop.html#Assignment-Operators dla aktualnej (5.10.1) dokumentacji. –