#!/usr/bin/perl
# file: readmail01.pl
# Figure 7.4: An readmail program
#-------------------------------------Sub decode_mimewords---------------------------------
sub decode_mimewords {
my $encstr = shift;#省略@_,完整shift @_; #此处@_是所有传入参数组成的list
my %params = @_;#hash
my @tokens;#list
$@ = ''; # error-return
# Collapse boundaries between adjacent encoded words:
$encstr =~ s{(\?\=)[\r\n \t]*(\=\?)}{$1$2}gs;#把$encstr 替换s///第一个()为$1第二个为$2
pos($encstr) = 0;#返回最后一次模式匹配的位置
### print STDOUT "ENC = [", $encstr, "]\n";
# Decode:
my ($charset, $encoding, $enc, $dec);
while (1) {
last if (pos($encstr) >= length($encstr));#Perl提供了last、next和redo这几个语句来控制代码块内的执行流程。last语句退出代码块; next语句终止当前指令然后开始下一循环;而redo语句则重新开始循环代码块却并不重新计算条件语句
my $pos = pos($encstr); # save it
# Case 1: are we looking at "=?..?..?="?
if ($encstr =~ m{\G # from where we left off..
=\?([^?]*) # "=?" + charset +
\?([bq]) # "?" + encoding +
\?([^?]+) # "?" + data maybe with spcs +
\?= # "?="
}xgi) {
($charset, $encoding, $enc) = ($1, lc($2), $3);
$dec = (($encoding eq 'q') ? _decode_Q($enc) : decode_base64($enc));
push @tokens, [$dec, $charset];#在数组末尾增加一个或多个元素。等价于slice (@array, @array, 0, elements);
next;
}
# Case 2: are we looking at a bad "=?..." prefix?
# We need this to detect problems for case 3, which stops at "=?":
pos($encstr) = $pos; # reset the pointer.
if ($encstr =~ m{\G=\?}xg) {
$@ .= qq|unterminated "=?..?..?=" in "$encstr" (pos $pos)\n|;
push @tokens, ['=?'];
next;
}
# Case 3: are we looking at ordinary text?
pos($encstr) = $pos; # reset the pointer.
if ($encstr =~ m{\G # from where we left off...
([\x00-\xFF]*? # shortest possible string,
\n*) # followed by 0 or more NLs,
(?=(\Z|=\?)) # terminated by "=?" or EOS
}xg) {
length($1) or die "MIME::Words: internal logic err: empty token\n";
push @tokens, [$1];
next;
}
# Case 4: bug!
die "MIME::Words: unexpected case:\n($encstr) pos $pos\n\t".
"Please alert developer.\n";
}
return (wantarray ? @tokens : join('',map {$_->[0]} @tokens));
}
分享到:
相关推荐
第15章 Perl/TK——窗口、按钮及其他 第16章 数据结构和数据库 第17章 创建包和模块 第18章 创建类和对象 第19章 面向对象编程 第20章 INTERNET和套接字编程 第21章 CGI编程:GGI.PM 第22章 CGI:创建WEB...
第15章 Perl/TK——窗口、按钮及其他 第16章 数据结构和数据库 第17章 创建包和模块 第18章 创建类和对象 第19章 面向对象编程 第20章 INTERNET和套接字编程 第21章 CGI编程:GGI.PM 第22章 CGI:创建WEB计数器、来宾...
Perl 相容语法函数库 PDF 格式文件函数库 PostgreSQL 数据库函数库 正则表达式函数库 信号与共享内存函数库 Solid 数据库链接函数库 SNMP 网管函数库 字符串处理函数库 URL 处理函数库 变量处理函数库 ...
Perl 相容语法函数库 PDF 格式文件函数库 PostgreSQL 数据库函数库 正则表达式函数库 信号与共享内存函数库 Solid 数据库链接函数库 SNMP 网管函数库 字符串处理函数库 URL 处理函数库 变量处理函数库 ...
Perl 相容语法函数库 PDF 格式文件函数库 PostgreSQL 数据库函数库 正则表达式函数库 信号与共享内存函数库 Solid 数据库链接函数库 SNMP 网管函数库 字符串处理函数库 URL 处理函数库 变量处理函数库 ...
Perl 相容语法函数库 PDF 格式文件函数库 PostgreSQL 数据库函数库 正则表达式函数库 信号与共享内存函数库 Solid 数据库链接函数库 SNMP 网管函数库 字符串处理函数库 URL ...
它可以用于为各种应用程序构建搜索功能,比如电子邮件客户端、邮件列表、Web 搜索、数据库搜索等等。Wikipedia、TheServerSide、jGuru 和 LinkedIn 等网站都使用了 Lucene。 Lucene 还为 Eclipse IDE、Nutch(著名的...
6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用...
利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类...
利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类...
利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类...
利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类...
利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类...
利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类...
利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类...
利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类...
利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类...
Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个...
利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类...
利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类...