Почему в этом коде Perl появляется «Синтаксическая ошибка возле '$ rocks ['»? - PullRequest
0 голосов
/ 05 января 2010

Когда я запускаю эту программу в ActivePerl 5.8 в Windows XP, я получаю синтаксическую ошибку:

#!C:\Perl\bin\perl.exe

use strict; # enabled
use warnings;


(my $rocks[0], my $rocks[1]) = qw/Hello World/; # Syntax error near '$rocks['

my $rocks[2] = 'Tom'; # Syntax error near '$rocks['
my $rocks[3] = 'Cat'; # Syntax error near '$rocks['

print $rocks[0];
print $rocks[1];
print $rocks[2];
print $rocks[3];

Когда я использовал (@) перед именем массива rocks, он работал хорошо. Как я могу исправить ошибку выше, когда я использовал $? Спасибо.

my @rocks = qw{Hello World Tom Cat}; # worked well.

Ответы [ 6 ]

11 голосов
/ 05 января 2010

Не используйте my снова и снова для объявления $rocks[0], $rocks[1] и т. Д. Объявите массив один раз (@rocks) и используйте его.

Исправленный код выглядит примерно так:

use strict;
use warnings; 
my @rocks; ## declare the array here

($rocks[0], $rocks[1]) = qw/Hello World/; 
$rocks[2] = 'Tom'; 
$rocks[3] = 'Cat';
4 голосов
/ 05 января 2010

Используйте оператор push:

my @rocks;

push @rocks, qw/ Hello World /;
push @rocks, "Tom";
push @rocks, "Cat";

Исключение явных и избыточных индексов массивов помогает вашему коду в будущем. Например, если вам нужно изменить инициализацию, вы не сможете испортить индекс массива, которого там нет.

1 голос
/ 05 января 2010

Вы можете сначала объявить массив в верхней части как:

my @rocks;

И удали мою декларацию из всех других мест.

Ваш код становится:

#!C:\Perl\bin\perl.exe
# ActivePerl 5.8 based
use strict; # enabled
use warnings;

my @rocks;

($rocks[0], $rocks[1]) = qw/Hello World/; # Syntax error near '$rocks['

$rocks[2] = 'Tom'; # Syntax error near '$rocks['
$rocks[3] = 'Cat'; # Syntax error near '$rocks['

print $rocks[0];
print $rocks[1];
print $rocks[2];
print $rocks[3];
1 голос
/ 05 января 2010

Вы делаете повторное выделение @rocks несколько раз. Попробуйте что-то вроде этого:

my @rocks;

$rocks[0] = 'Tom';
$rocks[1] = 'Cat';

и т.д.

1 голос
/ 05 января 2010

Я думаю, вам нужно объявить my @rocks и больше не использовать my при обращении к $rocks[xxx].

Если вы не знаете, сколько там будет элементов, вы можете использовать push для добавления новых элементов в массив (изначально размером 0).

0 голосов
/ 07 января 2010

Почему бы вам просто не вставить это прямо в @rocks?

use strict;
use warnings;

<b>my @rocks = qw'Hello World';</b>

my $rocks[2] = 'Tom';
my $rocks[3] = 'Cat';

print $rocks[0];
print $rocks[1];
print $rocks[2];
print $rocks[3];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...