Perl one liner可能是一个失控的多行++消息

时间:2013-01-10 15:53:14

标签: perl

我正在尝试重新格式化MySQL的日期。这个Perl单行给出了以下错误信息。

我想了解为什么会发出此错误消息。

echo 'Dec 2 04:08:40 EST 2012' | perl -lane ' my @abbr = qw( Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec );
                ( $amon, $mday, $hour,$tz, $year) =split('\s+',$_);
                for (my $i = 0; $i < @abbr; $i++) {
                next unless $abbr[$i] =~ /^$amon/;
                $mon=$i;
                }
                $mon++;
                print  "$year-$mon-$mday $hour";

            '

错误消息

syntax error at -e line 3, near ") {"
  (Might be a runaway multi-line ++ string starting on line 2)
syntax error at -e line 9, near ";}"
Execution of -e aborted due to compilation errors.

1 个答案:

答案 0 :(得分:1)

问题是您尝试在单引号字符串中嵌入单引号。您可以转义它们,但默认情况下split会在空格上拆分$_

这是一个解决方案,但Mat表示这是一个程序,而不是单行程序。把它放在一个文件中。

echo 'Dec 2 04:08:40 EST 2012' | perl -lane '
@abbr = qw( Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec );
($amon, $mday, $hour, $tz, $year) = split;
for my $i (0..$#abbr) {
  next unless $abbr[$i] =~ /^$amon/;
  $mon=$i;
}
$mon++;
print  "$year-$mon-$mday $hour";'