尽管正则表达式可以轻松做到这一点,但我不确定它是否是最直接的方法。它可能是最短的,但这实际上并不能使它成为最可维护的。
相反,我会建议这样的事情:
$x="14:48 say;0ed673079715c343281355c2a1fde843;2;laka;hello ;)";
if (($ts,$rest) = $x =~ /(\d+:\d+)\s+(.*)/)
{
    my($command,$hash,$pid,$handle,$quote) = split /;/, $rest, 5;
    print join ",", map { "[$_]" } $ts,$command,$hash,$pid,$handle,$quote
}
这导致:
[14:48],[say],[0ed673079715c343281355c2a1fde843],[2],[laka],[hello ;)]
我认为这只是更具可读性。不仅如此,我认为它也更容易调试和维护,因为这更接近于人类用笔和纸尝试同样的事情。将字符串分解成块,然后您可以更轻松地解析 - 让计算机完全按照您的意愿执行。当需要进行修改时,我认为这个会更好。YMMV。