12.8. Perl 短脚本的疯狂

虽然任何 AWK 脚本都可以通过 a2p(1) 转换成 Perl,但单行的 AWK 脚本最好还是手动转换为单行的 Perl 脚本。

让我们来看看下面这个 AWK 脚本片段。

  1. awk '($2=="1957") { print $3 }' |

这等价于下列的任意一行。

  1. perl -ne '@f=split; if ($f[1] eq "1957") { print "$f[2]\n"}' |
  1. perl -ne 'if ((@f=split)[1] eq "1957") { print "$f[2]\n"}' |
  1. perl -ne '@f=split; print $f[2] if ( $f[1]==1957 )' |
  1. perl -lane 'print $F[2] if $F[1] eq "1957"' |
  1. perl -lane 'print$F[2]if$F[1]eq+1957' |

最后一个简直就是个迷。它用上了下面列出的这些 Perl 的特性。

  • 空格为可选项。

  • 存在从数字到字符串的自动转换。

更多的命令行选项参见 perlrun(1)。想要更疯狂的 Perl 脚本,可以使用 Perl Golf