我正在使用Perl one liner tutorial并且有一个这样的衬垫:
const
您会看到功能名称拆分已在括号内。有关此功能使用的文档很难在Google上找到,因此我无法找到有关此功能的任何信息。有人可以解释一下吗?谢谢。
答案 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
,这非常清楚这种切片的使用。