-3

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.
4

1 に答える 1

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";'
于 2013-01-10T16:05:29.897 に答える