为什么我在这个Perl代码中得到“$ rocks ['”附近的“语法错误?

时间:2010-01-05 13:09:13

标签: perl arrays

当我在Windows XP上的ActivePerl 5.8上运行此程序时,出现语法错误:

#!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 个答案:

答案 0 :(得分:11)

请勿反复使用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';

答案 1 :(得分:4)

使用push运算符:

my @rocks;

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

避免显式和冗余的数组索引有助于为您的代码提供面向未来的证明。例如,如果您发现需要更改初始化,则不能使用不存在的数组索引。

答案 2 :(得分:1)

我认为您需要声明my @rocks,然后在引用my时不再使用$rocks[xxx]

如果你不知道那里有多少个元素,你可以使用push将新元素添加到(最初的0大小)数组中。

答案 3 :(得分:1)

您要多次重新声明@rocks。尝试这样的事情:

my @rocks;

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

答案 4 :(得分:1)

您可以先将顶部的数组声明为:

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];

答案 5 :(得分:0)

为什么不把它直接放到@rocks

use strict;
use warnings;

my @rocks = qw'Hello World';

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

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