限制perl中的for循环

Limiting a for loop in perl

我有一点 perl,它通过管道接收数据 运行

... | perl -0 -wnE 'say for /\d+/g'

打印从管道之前传递的每个数值。我将如何更改此语法以便仅打印找到的最后十个?

您可以通过 tail unix 命令对其进行管道传输以仅显示最后 10 个数字:

... | perl -0 -wnE 'say for /\d+/g' | tail -10
... | perl -M5.010 -ne'say for /\d+/g' | tail -10
... | perl -nle'print for /\d+/g' | tail -10

仅限 Perl:

... | perl -M5.010 -ne'push @n, /\d+/g; splice(@n, 0, -10); END { say for @n }'
... | perl -nle'push @n, /\d+/g; splice(@n, 0, -10); END { print for @n }'

备注:

  • -E 不向前兼容,这意味着升级 Perl 可能会破坏程序。它应该只用于一次性代码。替换为 -M5.010 -e.
  • -0 是试图吞噬输入文件。那不是它的作用。 -0777 应该用于此。但是没有理由在这里吞噬输入文件。