【问题标题】:CGI error Can't use an array as a referenceCGI 错误不能使用数组作为参考
【发布时间】:2019-01-27 17:17:13
【问题描述】:

我的配置是 Debian Stretch

我使用命令验证我的 Perl 代码

line perl -wcT admin.cgi

我在这一行的代码中有错误:

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

错误是:

不能使用数组作为参考

我也试过 this web editor

似乎错误是:

@{$FORMAT{$name}}->[1]

【问题讨论】:

  • @Hunter McMillen 感谢您的及时回答,它立即可以正常工作。
  • @Hunter:你是在建议@{$FORMAT{$name}}[1]?我认为这不太可能。 $FORMAT{$name}-&gt;[1]$FORMAT{$name}[1] 的可能性更大。

标签: perl compiler-errors syntax-error cgi


【解决方案1】:

我的名为 webadmin.cgi 的 cgi 现在在我的 pc windows 7 上的 ActivePerl 和 Xampp 上。

这个在本地测试中工作(完美运行),但错误相同:

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

如果最后在 OS debian stretch(我的专用服务器)上安装相同的文件:

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

如果我用两次解决方案替换,程序在线运行但弹出我。

感谢您的耐心,

奥诺特

【讨论】:

  • 在 Windows 服务器上是 perl 版本 5.8.8 和 debian stretch perl 版本 5.24.1
【解决方案2】:

如你所说,问题就在这里:

@{$FORMAT{$name}}->[1]

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

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

@{$FORMAT{$name}}[1]

或者你可以使用deferencing箭头和数组索引括号:

$FORMAT{$name}->[1]

你不能做的(如你所见)是同时使用这两种语法:-)

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

${$FORMAT{$name}}[1]

在我的第二个解决方案中,箭头实际上是可选的(在两组括号之间取消引用箭头总是),所以你可以这样写:

$FORMAT{$name}[1]

【讨论】:

  • 请注意,@{$FORMAT{$name}}[1] 是一个单元素数组切片,应该会产生警告。您的意思可能是${$FORMAT{$name}}[1] ,我认为$FORMAT{$name}[1] 可能是我们想要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-07
  • 2018-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-15
  • 1970-01-01
相关资源
最近更新 更多