那麼,這取決於你想要對數據做什麼。
假設你有解決這個大while (<>) { ... }
,您可以通過只使用分割得到的最簡單的解析:
my @fields = split;
下一級將增添幾分意義
my ($date, $time, $id, $host, $from, $to, undef, $dest) = split;
(注,如果你想忽略一個結果,你可以指定爲undef
)
最後,你可以通過使用正則表達式清理大量的文件裂變。您也可以將上面的拆分與較小的正則表達式組合起來,分別清理每個字段。
my ($datetime, $id, $host, $from, $to, $dest) =
/([\d-]+ [\d:]+) \s+ # date and time together
(\S+) \s+ # message id, just a block of non-whitespace
<(.*?)> \s+ # hostname in angle brackets, .*? is non-greedy slurp
\((.*?)\) \s+ # from email in parens
<(.*?)> \s+ # to email in angle brackets
\S+ \s+ # separated between to-email and dest
(\S+) # last bit, could be improved to (\w)=\[(.*?)\]
/x; # /x lets us break all of this up, so its a bit readable
當然,你可以繼續服用這種種愚蠢的,但如果你要開始做這些領域的更具體的分析,我會與最初的拆分之後broken-去out字段解析。例如:
my ($date, $time, ...) = split;
my ($year, $month, $day) = split(/-/, $date);
my ($hour, $min, $sec) = split(/:/, $time);
my ($from_user, $from_host) = ($from =~ /< ([^\@]+) \@ (.*) >/x);
...etc...
這個問題有太多問題。請一次發佈一個**特定**問題。 – Mat 2011-04-21 05:22:18
好的。虐待編輯這個。 – MealstroM 2011-04-21 06:22:33