这看起来像一个单行程?

时间:2012-12-31 00:32:26

标签: perl

这样的事情怎么写成一个单行?

我很想把所有内容都放在while - 循环和perl -e '...' data中,但是有更好的方法,然后有if - 语句吗?

open(F, '<', 'data') or die $!;

while (my $line = <F>) {

    if ($line =~ m/test /) {
        my @a = split / /, $line;
        printf("%2s %4s %4s\n", substr($a[1], 1), $a[2], substr($a[5], 0, -1));
    } else {
        print $line;
    }

}

close F;

2 个答案:

答案 0 :(得分:6)

首先,让我们清理实际的程序。

while (<>) {
   if (/test/) {
      my @a = split;
      $_ = sprintf("%2s %4s %4s\n", substr($a[1], 1), $a[2], substr($a[5], 0, -1));
   }

   print;
}

然后,很容易利用-p-a(“制作单行”)。

perl -pale'$_ = sprintf("%2s %4s %4s", substr($F[1], 1), $F[2], substr($F[5], 0, -1)) if /test/' data

答案 1 :(得分:1)

像丑陋的东西:

perl -anle 'printf("%2s %4s %4s", substr($F[1], 1), $F[2], substr($F[5], 0, -1)),next if grep /test/, @F;print'

可能?但是你为什么要使用单线?