我正在研究Perl one liner 教程,有一个这样的衬里:
ls -lAF | perl -e 'while (<>) {next if /^[dt]/; print +(split)[8] . " size: " . +(split)[4] . "\n"}'
Run Code Online (Sandbox Code Playgroud)
您看到函数名称split已在括号内.关于这种功能使用的文档很难在Google上找到,所以我找不到任何关于它的信息.有人可以解释一下吗?谢谢.
使用split默认是一切都没有用- 它是$_按空格分割并返回值列表.
它(...)[8]被称为列表切片,它过滤掉除了返回的第9个值以外的所有值split.前面的加号是为了防止Perl将括号误解为函数调用的一部分.这也意味着你不需要它在第二个实例上.
所以print +(split)[8];基本上是一种非常简洁的写作方式
my @results=split(/ /,$_);
print $results[8];
Run Code Online (Sandbox Code Playgroud)
您所包含的示例是执行split两次,因此执行更详细的版本可能更有效,因为您可以$results[4]从上面获得更多详细信息而无需任何额外的努力.
或者因为您可以在其中放入索引列表[],您可以执行拆分一次并使用printf格式化输出
printf "%s size: %s\n", (split)[8,4];
Run Code Online (Sandbox Code Playgroud)