正規表現でこれを簡単に行うことができますが、それが最も簡単な方法かどうかはわかりません。おそらく最短ですが、実際には最も保守しやすいわけではありません。
代わりに、次のようなことをお勧めします。
$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。