这是一个条目的样子:
Jan 26 20:53:31 hostname logger: System rebooted for hard disk upgrade
我正在编写一个小应用程序来解析这样的条目并将格式良好的消息通过电子邮件发送给管理员。我正在用 Perl 编写并找到了 split() 函数,这正是我正在寻找的:
my @tmp = split(/ /, $string, 4);
@tmp = {$date, $hostname, $facility, $message)
这就是我希望得到的。Split() 可以处理 $message 部分中的空格,因为我限制了要拆分的“单词”的数量。但是, $date 部分中的空格会将其丢弃。有没有一种干净的方法可以让这些变量代表它们应该表达的意思?
我知道我可以使用 substr() 来获取前 15 个字符(日期),然后使用 split() 并将其限制为 3 个单词而不是 4 个,然后从那里获取我所有的字符串。但是有没有更优雅的方法来做到这一点?