当我在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.
答案 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];