#!/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));
}
分享到:
相关推荐
1. **perl-MIME-Lite-3.030-1.el7.noarch.rpm**:这是一个用于创建、解析和发送电子邮件的Perl模块,包括MIME编码支持。 2. **perl-Log-Dispatch-2.41-1.el7.1.noarch.rpm**:提供灵活的日志记录机制,可以将日志...
第15章 Perl/TK——窗口、按钮及其他 第16章 数据结构和数据库 第17章 创建包和模块 第18章 创建类和对象 第19章 面向对象编程 第20章 INTERNET和套接字编程 第21章 CGI编程:GGI.PM 第22章 CGI:创建WEB...
- **文件系统交互**: 展示了如何使用Perl进行复杂的文件操作,包括文件读写、目录遍历等。 - **HTML处理**: 介绍了如何使用Perl对HTML文档进行解析和处理,这对于网页爬虫等应用非常有用。 - **数据库访问**: 讨论了...
- **XML解析**: Perl拥有多个成熟的库(如XML::Parser、XML::Simple等),用于读取、解析和操作XML格式的数据。这对于自动化处理各种类型的配置文件特别有帮助。 - **YAML处理**: YAML是一种易于阅读和编写的标记...
- **数据库访问**:Perl提供了多种模块支持数据库操作,可用于实现复杂的查询和数据处理任务。 - **网页抓取**:结合迭代器和解析技术,可以构建高效的网页抓取程序,用于数据挖掘和网络监控。 - **排版**:利用Perl...
- **强大的文本处理能力**:Perl内置了丰富的正则表达式支持,能够轻松处理复杂的文本模式匹配和替换任务,对于解析和操作SQL Server日志、配置文件等非常有效。 - **广泛的模块库**:Perl拥有一个庞大的模块库CPAN...
Perl由Larry Wall于1987年创建,起初主要用于文本处理,随着时间的推移,它发展成为一门功能丰富的多用途编程语言,能够处理从简单的文本操作到复杂的网络编程、数据库交互以及系统管理等任务。 Perl的设计理念是...
这些Perl模块是MHA运行所必需的,用于处理数据库连接、邮件通知、日志记录、参数验证等关键功能。以下是这些依赖包的详细介绍: 1. **perl-DBD-MySQL-4.013-3.el6.x86_64.rpm**:这是Perl数据库驱动接口(DBI)的一...
`sqlite3.c`可能包含了该模块的源代码或者相关依赖,使得用户可以在Perl中方便地操作SQLite数据库。 2. `c\x86_64-w64-mingw32\include\*`:这些文件夹和文件是针对x86_64架构的MinGW-w64编译器的头文件。它们包含...
9. **数据库接口**:Perl的DBI(Database Interface)模块为多种数据库提供统一的接口,简化了数据库操作。通过DBD(DBI Driver)子模块,可以连接到MySQL、Oracle、PostgreSQL等各种数据库。 10. **国际化和本地化...
Perl是一种强大的脚本语言,它在Bugzilla中扮演着核心角色,处理各种任务,如数据库交互、网页生成等。 在安装Bugzilla 4.2.2之前,你需要安装的Perl模块通常包括但不限于以下这些: 1. **DBI** 和 **DBD::mysql**...
- **SMTP/POP3/IMAP**:探讨邮件协议及其在Perl中的应用。 - **DNS解析**:介绍DNS解析机制及其在Perl中的实现。 ##### 第19章:CGI编程 - **CGI基础**:介绍CGI(Common Gateway Interface)的概念。 - **CGI环境...
第15章 Perl/TK——窗口、按钮及其他 第16章 数据结构和数据库 第17章 创建包和模块 第18章 创建类和对象 第19章 面向对象编程 第20章 INTERNET和套接字编程 第21章 CGI编程:GGI.PM 第22章 CGI:创建WEB计数器、来宾...
### Perl语言入门(第四版):详尽解析与学习指南 #### 一、Perl语言概览 **1.1 Larry Wall为何创建Perl** Perl由Larry Wall于1987年开发,初衷是为了解决文本处理和数据报告的问题。Larry Wall在设计Perl时,旨在...
- **电子邮件处理**:Perl支持发送和接收电子邮件,Net::SMTP 和 Email::Sender 是常用的邮件处理模块。 #### 七、数据库应用 - **DBI模块**:Perl DBI (Database Interface) 提供了一个通用的数据库访问层,可以...
这些包和模块覆盖了从网络编程、数据库接口、图形用户界面到科学计算等各个领域,极大地扩展了Perl的功能范围。 #### 面向对象编程(OOP) Perl支持面向对象编程,尽管它的OOP模型与一些其他语言有所不同。Perl的类...
在本文档中,我们要讨论的是Perl正则表达式在SAS中的应用,即在SAS软件中如何使用Perl风格的正则表达式来进行模式匹配和字符串操作。 首先,要了解SAS(Statistical Analysis System)是统计分析和商业智能的软件...
Perl还提供了丰富的模块生态系统,如DBI(数据库接口)模块,用于与各种数据库进行交互,以及CGI模块,用于开发Web应用程序。 Perl的面向对象编程(OOP)也是24学时教程的重要部分。你将了解类、对象、继承、封装和...