我试图将Perl代码与JavaScript集成,并遇到了一个问题,我只想查看我在Perl中存储的数组的输出。下面的代码为我提供了已存储的数组中的正确元素,但我无法在JavaScript中看到这些元素。
my @list_of_vendors;
while(!$resultSet->EOF) {
push @list_of_vendors, $resultSet->Fields("vendor")->Value;
$resultSet->MoveNext;
}
print "The First Vendor is: " . $list_of_vendors[0]. "\n";
这打印The First vendor is: 3D Systems
以下代码似乎没有给我我想要的结果......
print <<ONE;
<html>
<body>
<h4> Test Vendor Array Javascript </h4>
<p id="demo"</p>
<script type="text/javascript" language="JavaScript">
var myVendorArray = @list_of_vendors;
document.write('<p> $list_of_vendors[0] is the same as myVendorArray[0] </p>');
</script>
</body>
</html>
ONE
我认为这会给我3D Systems is the same as 3D Systems
,但它会为html屏幕留空。
有人能指出我可能做错了什么吗?或者指出我正确的方向使用notepad ++或其他一些有用的IDE来调试它。非常感谢!!
答案 0 :(得分:3)
代码的heredoc中的所有内容都使用Perl进行插值,但客户端将其解释为JavaScript。所以,如果你写
@list_of_vendors = ("Alice","Bob","Charlie");
...
print <<EOF;
...
<script>
var list_of_vendors = @list_of_vendors;
...
EOF
客户会看到的是
var list_of_vendors = Alice Bob Charlie;
Perl具有非常好的工具,可以将Perl数据结构转换为JSON表示法,这很容易被JavaScript理解,所以你应该做类似的事情:
use JSON;
$list_of_vendors_json = encode_json(\@list_of_vendors);
...
var list_of_vendors = $list_of_vendors_json;
...
在这种情况下,浏览器会看到如下内容:
var list_of_vendors = ["Alice","Bob","Charlie"];
并且其余代码将按预期工作。