perl统计算数发邮件的几个细节: utf8, mailx, json

最近重新实现了一个使用-perl 读取数据日志进行一些统计然后将统计结果通过邮件发送出来的任务。涉及到几个细节,记录如下。

1. Perl中的JSON使用
在perl中调用 -json 需要
use JSON;
my $json = JSON->new->allow_nonref;
my $scalar = $json->utf8(0)->decode($content_in_json);
这里的 utf8(0) 很诡异,意思是对后面的$content不要使用utf8进行编码,也即如果$content本身已经是utf8的话,不这样操作可能会报错wide character found at procedure entry的错误,或者乱码。相应的,如果$content本身不是utf8的,则需要使用utf8对其进行编码:
my $scalar = $json->utf8->decode($content);
另外,$scalar也需要注意可能是@array,也可能是%hash。需依照具体情况多探测,较好的方式是use Dumper;。

2. 写utf8的字符顺序标记BOM–Byte Order Mark
关于utf8 的BOM可以进一步搜索,如果要在一个文件的头部加注BOM需要使用binmode。之所以要加注,是因为一些软件如MS Word, Excel等,对 utf8 w/o BOM的文件(没有字符顺序标记的UTF)就会显示成乱码,而加注了BOM的文件,才能够显示正常。对一个文件加注BOM的需求就这样产生的,实现过程如下:
open(FILE, “> test.file”) or warn “cannnot open test.file for write.\n”;
binmode FILE;
print FILE “\xff\xbb\xbf”;
close(FILE);

3. mailx发送邮件带附件
这样的需求在几年前的时候就实现过,现在重新写,有些记不得的细节就从网上搜索,结果发现使用 mailx, nail等发送带附件的邮件,结果发现仍在使用 uuencode 这样的方式,我记忆中不是这样的,于是反复试验,真的不用,通过 man mailx 的手册就能够看到多加一个参数 -a attachedfile 的形式就实现了发送附件的邮件。小计如下:
my $mailcontent = “/tmp/mailcontent.tmp”;
`/usr/bin/echo “Hi all, \nThis is a test mail.\nThere is a file attached with this message.\n” > $mailcontent`;
`/usr/bin/mailx -s “mail with attached file.” -a attached.file  wadelau@ufqi.com < $mailcontent`;
事情就这样成了,通过一个临时邮件内容文件,结合管道命令,实现了发生带附件的邮件。
这让我想起,有些网上内容需要更新的问题,网络的发展,越往后期,目前的内容就可能会陈旧,而这些陈旧的内容在搜索引擎那里依然存在,有的内容可能获得较高的推荐权重,但实际上某些内容所述已经被淘汰,但用户却得不到最新的,是个问题。

总结随想,备忘。

赠送 -自然域名 注册码

此条目发表在编程技术, 计算机技术分类目录,贴了, , , 标签。将固定链接加入收藏夹。

perl统计算数发邮件的几个细节: utf8, mailx, json》有1条回应

  1. Wadelau说:

    关于 UTF BOM, 实测的输出到 MS Excel的Bom写法:

    print TARGETF “\xef\xbb\xbf”;

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

Captcha Code