如何获取并打印Perl中返回列表的表达式的第n个元素?
获取Perl对象方法返回列表的第一个元素的简便写法
你遇到的是Perl语法解析的优先级问题——方法调用->的优先级比数组下标[]高,但直接写$object->method()[0]会被解析器误判,导致语法错误。除了你用的print(($object->method())[0]),还有几种更简洁的写法:
列表赋值取首元素:
如果只需要第一个元素,直接用列表赋值语法,把方法返回的列表赋值给单个变量:my ($first_element) = $object->method(); print $first_element;这种方式最直观,也从根源上避免了print的括号歧义问题。
用
->明确分隔方法调用和数组下标:
在方法调用后加一个空的->,让解析器明确区分方法调用和数组切片,这样就能直接使用下标:print $object->method()->[0];这个写法比嵌套括号更简洁,Perl会正确解析为“先调用方法,再取返回列表的第一个元素”。
用
+消除print的括号歧义:
如果你想直接在print语句里写,不用嵌套两层括号,可以在括号前加+,告诉Perl后面的括号是列表切片的一部分,而非print的参数括号:print +($object->method())[0];
另外,若你的Perl版本在5.20及以上,还可以利用默认开启的postderef特性,写法更简洁:
print $object->method->@[0];
不过这种数组切片写法的可读性稍弱,适合熟悉Perl新特性的场景。
内容的提问来源于stack exchange,提问作者Gilles Quénot
相关产品推荐
相关产品推荐

