可以通过链接从函数的结果中获取数组的元素,如下所示:
print $elem->descendants->[0]->as_trimmed_text();
其中$elem
是HTML::Element
。
有时这似乎适用于某些功能,但上述功能无效。我找不到任何关于这种链接是否有用的文档。
正常的非链接方式是:
($elem->descendants)[0]->as_trimmed_text();
答案 0 :(得分:3)
根据HTML::Element
模块的文档,方法descendants
返回一个列表。
<强>后代强>
@descendants = $ h-&gt; descendants();在列表上下文中,返回所有$ h的后代元素的列表, 在预订中列出(即,一个元素出现在其内容之前 - 元件)。文本段不会出现在列表中。 在标量上下文中,返回所有这些元素的计数。
然后你必须使用下标运算符索引返回的列表,就像你说的那样。
箭头操作符有两个角色。当它的右侧是[...]
下标时(这里考虑的情况),它通过数组引用访问各个数组元素 - 它必须是左侧的东西。来自Arrow operator in perlop
如果右侧是[...],{...}或(...)下标,那么左侧必须是对数组的硬引用或符号引用,哈希,或者分别是子程序。
因此,要以这种方式使用它,我们需要从descendants
返回的arrayref。函数通常会返回一个数组引用,这可能就是当你以这种方式工作时。
->
运算符的另一个用途是当它的左侧是一个对象(祝福引用)或类/包名称时,通常用于调用方法。从上面链接的同一页面
否则,右侧是方法名称或包含方法名称或子程序引用的简单标量变量,左侧必须是对象(有福的引用)或类名称(即,包裹名字)。
在行中下一次使用它会调用一个方法->as_trimmed_text()
,所以显然descendants
返回的列表的第一个元素是一个对象。
答案 1 :(得分:1)
如前所述,间接运算符在其操作数上强制使用标量上下文,并期望引用作为其第一个操作数
在标量上下文中,$elem->descendants
返回后代数的简单计数,因此操作失败。它只在列表上下文中返回一个后代元素列表
您可以通过生成匿名数组来强加列表上下文并生成数组引用,如此
[ $elem->descendants ]->[0]->as_trimmed_text;
但我更喜欢像
这样的东西my ($first_descendant) = $elem->descendants;
$first_descendant->as_trimmed_text;