Perl CGI错误可以';不要将数组用作引用

Perl CGI错误可以';不要将数组用作引用,perl,compiler-errors,syntax-error,cgi,Perl,Compiler Errors,Syntax Error,Cgi,我的配置是Debian Stretch 我用命令验证我的Perl代码 line perl -wcT admin.cgi 我在这一行的代码中有一个错误: print &select("$id-2",\@values,\@values,@{$FORMAT{$name}}->[1]),"<br /> \n"; 正如你所说,问题在于: @{$FORMAT{$name}}->[1] 似乎$FORMAT{$name}应该包含数组引用。您需要从引用的数组中获取第二个元素。

我的配置是Debian Stretch

我用命令验证我的Perl代码

line perl -wcT admin.cgi
我在这一行的代码中有一个错误:

print &select("$id-2",\@values,\@values,@{$FORMAT{$name}}->[1]),"<br /> \n";

正如你所说,问题在于:

@{$FORMAT{$name}}->[1]
似乎
$FORMAT{$name}
应该包含数组引用。您需要从引用的数组中获取第二个元素。有(至少!)两种方法可以做到这一点

可以取消对数组引用的引用以获取数组,然后使用标准数组索引括号:

@{$FORMAT{$name}}[1]
$FORMAT{$name}->[1]
或者,可以将延迟箭头与数组索引括号一起使用:

@{$FORMAT{$name}}[1]
$FORMAT{$name}->[1]
您不能同时使用这两种语法(正如您发现的那样):-)

更新:正如博罗丁在评论中指出的,我的第一个解决方案是不正确的。从数组访问单个元素时,应将
@
更改为
$
。所以它实际上应该是:

${$FORMAT{$name}}[1]
在我的第二个解决方案中,箭头实际上是可选的(两组括号之间的解引用箭头总是可选的),因此您可以编写:

$FORMAT{$name}[1]

我的名为webadmin.cgi的cgi现在在我的pc windows 7上的带有Xampp的ActivePerl上

这一个在本地测试中工作(运行正常),但有相同的错误:

print &select("$id-2",\@values,\@values,@{$FORMAT{$name}}->[1]),"<br /> \n";
print&select(“$id-2”,\@values,\@values,@{$FORMAT{$name}}->[1]),“
\n”;
如果最终在OS debian stretch(我的专用服务器)上安装相同的文件:

如果我使用相同的语法错误进行测试,它将不起作用(错误500)

如果我用两次解决方案替换,联机程序将运行,但会弹出我

谢谢你的耐心


或不删除取消引用
->
,您试图通过使用
->
@Hunter-McMillen取消引用来将
{}
中的内容视为数组引用。谢谢您的快速回答,它立即就可以正常工作。@Hunter:您是在建议
{$FORMAT{$name}[1]
?我认为这不太可能
$FORMAT{$name}->[1]
$FORMAT{$name}[1]
的可能性更大。请注意,
@{$FORMAT{$name}[1]
是一个单元素数组片,应该会产生警告。您的意思可能是
${$FORMAT{$name}}[1]
,我认为
$FORMAT{$name}[1]
可能就是我们想要的