【发布时间】:2013-07-09 15:49:45
【问题描述】:
我想在 Perl 中提取邮件的标题。我不需要身体,所以我不想花时间解析它们。
Email::Simple::Header 看起来很有用,但典型的实例化涉及解析整个电子邮件(包括正文)。所以我正在考虑像这样啜饮标题
local $/ = "\n\n";
my $head = <>;
my $parsed = Email::Simple::Header->new($head);
这是最有效的方法吗?
【问题讨论】:
我想在 Perl 中提取邮件的标题。我不需要身体,所以我不想花时间解析它们。
Email::Simple::Header 看起来很有用,但典型的实例化涉及解析整个电子邮件(包括正文)。所以我正在考虑像这样啜饮标题
local $/ = "\n\n";
my $head = <>;
my $parsed = Email::Simple::Header->new($head);
这是最有效的方法吗?
【问题讨论】:
我不确定这是否会为您节省任何时间。 Email::Simple 不会解析电子邮件的正文。它查看正文的唯一时间是通过调用Email::Simple::_split_head_from_body() 将其与标题分开。这与您对$/ = "\n\n" 所做的事情几乎相同,但可以更好地处理不同类型的换行符。
除非您有分析证据表明您的程序在不必要的电子邮件正文解析上花费了大量时间(不管它会在那里解析什么),否则请避免过早优化并正常使用 Email::Simple 模块。
【讨论】:
长度为零的行将标头与消息的其余部分分开。您的 perl 脚本可以简单地读取传入消息直到第一个零长度行,这就是标题。
【讨论】:
$/="\n\n" 所做的事情。此外,可以将其设置为"",它将匹配任意数量的连续空白行。