我正在尝试重新格式化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.
答案 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";'