Ну, это зависит от того, что вы хотите сделать с данными.
Предполагая, что у вас есть большой while (<>) { ... }
, вы можете получить самый простой анализ, просто используя split:
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
Конечно, вы можете продолжать использовать это для всех видов глупостей, но если вы собираетесь начать делать большеПри конкретном разборе этих полей я бы пошел с начальным разбиением с последующим разбором разбитых полей.Например:
my ($date, $time, ...) = split;
my ($year, $month, $day) = split(/-/, $date);
my ($hour, $min, $sec) = split(/:/, $time);
my ($from_user, $from_host) = ( $from =~ /< ([^\@]+) \@ (.*) >/x );
...etc...