Perl one liner中括号内的函数名称

时间:2018-02-14 13:39:03

标签: perl

我正在使用Perl one liner tutorial并且有一个这样的衬垫:

const

您会看到功能名称拆分已在括号内。有关此功能使用的文档很难在Google上找到,因此我无法找到有关此功能的任何信息。有人可以解释一下吗?谢谢。

3 个答案:

答案 0 :(得分:5)

使用split默认所有内容可能无济于事 - 它将$_拆分为空格并返回值列表。

(...)[8]被称为列表切片,它会过滤除split返回的第9个值以外的所有值。前面的加号是为了防止Perl将括号误解为函数调用的一部分。这也意味着你不需要在第二个实例上使用它。

所以print +(split)[8];基本上是一种非常简洁的写作方式

my @results=split(/ /,$_);
print $results[8]; 

您所包含的示例是执行split两次,因此执行更详细的版本可能更有效,因为您可以从上面获得$results[4]而无需任何额外的努力。< / p>

或者因为您可以在[]内放置索引列表,您可以进行一次拆分并使用printf格式化输出

printf "%s size: %s\n", (split)[8,4];

答案 1 :(得分:2)

在我看来,你应该避免这位作者的建议,因为我在你的问题评论中提出的理由,以及他们似乎根本不了解他们的主题。

最初的“单线”就是这个

ls -lAF | perl -e 'while (<>) {next if /^[dt]/; print +(split)[8] . " size: " . +(split)[4] . "\n"}'

使用-n-a选项可以更简洁地编写这些内容,这样做

ls -lAF | perl -wane 'print $F[8] size: $F[4]\n" unless /^[dt]/'

即使没有这些选项的“奢侈”,你也可以写

ls -lAF | perl -e '/^[dt]/ or printf "%s size: %s\n", (split)[8,4]  while <>'

我建议您在接下来的几年内多次阅读Camel Book。这是学习我找到的语言的最佳方式。

答案 2 :(得分:1)

Perl的大多数安装都包含一整套文档,可以使用perldoc命令进行访问。

你需要阅读Slices section of perldoc perldata,这非常清楚这种切片的使用。