【发布时间】:2014-12-04 18:30:21
【问题描述】:
我正在尝试编写一个 Perl 脚本,该脚本将遍历 XML 文件并找到所有名为“className”的条目。
我正在使用 XML::Simple 库,结果证明它的名字很糟糕。
该库似乎将类似名称元素的序列表示为一个数组。
我正在尝试使用基本的索引循环遍历列表中的元素。所以我试图找出数组中有多少元素:
} elsif("ARRAY" eq ref(@_[0])) {
my $list = @_[0];
print "scalar($list): " . scalar($list) . "\n";
print "\$#list: " . $#list . "\n";
print "\n";
}
这是我的代码的输出:
scalar(ARRAY(0x600845398)): ARRAY(0x600845398)
$#list: -1
我在网上找到了关于使用标量函数和奇怪的$# 表示法的参考资料,但都没有给我一个有意义的数字。
【问题讨论】:
-
scalar($list)--$list已经是一个标量。你需要使用@来取消引用$list,然后使用scalar @$list来获取长度。 -
另外,
@_[0]正在从@_获取一个元素数组切片。最好写成单项$_[0]。 -
另外,
$list是包含数组(或者,在本例中为数组引用)的变量的错误名称。它只是鼓励人们相信数组和列表是一回事。 -
我开始觉得应该劝阻在新代码中使用 perl 的用户。 :) 我在哪里可以了解所有不同前缀象形文字的含义和必要性?