`
anson_xu
  • 浏览: 512993 次
  • 性别: Icon_minigender_1
  • 来自: 惠州
社区版块
存档分类

perl 邮件解析及数据库操作

    博客分类:
  • perl
阅读更多
#!/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));
}








分享到:
评论

相关推荐

    manager及perl依赖centos7版.zip

    1. **perl-MIME-Lite-3.030-1.el7.noarch.rpm**:这是一个用于创建、解析和发送电子邮件的Perl模块,包括MIME编码支持。 2. **perl-Log-Dispatch-2.41-1.el7.1.noarch.rpm**:提供灵活的日志记录机制,可以将日志...

    perl技术内幕,perl黑皮书

    第15章 Perl/TK——窗口、按钮及其他 第16章 数据结构和数据库 第17章 创建包和模块 第18章 创建类和对象 第19章 面向对象编程 第20章 INTERNET和套接字编程 第21章 CGI编程:GGI.PM 第22章 CGI:创建WEB...

    Higher order perl programming

    - **文件系统交互**: 展示了如何使用Perl进行复杂的文件操作,包括文件读写、目录遍历等。 - **HTML处理**: 介绍了如何使用Perl对HTML文档进行解析和处理,这对于网页爬虫等应用非常有用。 - **数据库访问**: 讨论了...

    使用Perl实现系统管理自动化(第二版)

    - **XML解析**: Perl拥有多个成熟的库(如XML::Parser、XML::Simple等),用于读取、解析和操作XML格式的数据。这对于自动化处理各种类型的配置文件特别有帮助。 - **YAML处理**: YAML是一种易于阅读和编写的标记...

    高阶Perl [中文版] Higher-Order Perl [2013] Mark.Jason.Dominus

    - **数据库访问**:Perl提供了多种模块支持数据库操作,可用于实现复杂的查询和数据处理任务。 - **网页抓取**:结合迭代器和解析技术,可以构建高效的网页抓取程序,用于数据挖掘和网络监控。 - **排版**:利用Perl...

    Real World SQL Server Administration with Perl

    - **强大的文本处理能力**:Perl内置了丰富的正则表达式支持,能够轻松处理复杂的文本模式匹配和替换任务,对于解析和操作SQL Server日志、配置文件等非常有效。 - **广泛的模块库**:Perl拥有一个庞大的模块库CPAN...

    Perl 语言编程 中文

    Perl由Larry Wall于1987年创建,起初主要用于文本处理,随着时间的推移,它发展成为一门功能丰富的多用途编程语言,能够处理从简单的文本操作到复杂的网络编程、数据库交互以及系统管理等任务。 Perl的设计理念是...

    mha-依赖perl环境包-rel6版本.rar

    这些Perl模块是MHA运行所必需的,用于处理数据库连接、邮件通知、日志记录、参数验证等关键功能。以下是这些依赖包的详细介绍: 1. **perl-DBD-MySQL-4.013-3.el6.x86_64.rpm**:这是Perl数据库驱动接口(DBI)的一...

    strawberry-perl-5.28.1.1-1-win64-x64.zip

    `sqlite3.c`可能包含了该模块的源代码或者相关依赖,使得用户可以在Perl中方便地操作SQLite数据库。 2. `c\x86_64-w64-mingw32\include\*`:这些文件夹和文件是针对x86_64架构的MinGW-w64编译器的头文件。它们包含...

    perl教程 希望对大家有用

    9. **数据库接口**:Perl的DBI(Database Interface)模块为多种数据库提供统一的接口,简化了数据库操作。通过DBD(DBI Driver)子模块,可以连接到MySQL、Oracle、PostgreSQL等各种数据库。 10. **国际化和本地化...

    安装bugzilla4.2.2需要的perl模块

    Perl是一种强大的脚本语言,它在Bugzilla中扮演着核心角色,处理各种任务,如数据库交互、网页生成等。 在安装Bugzilla 4.2.2之前,你需要安装的Perl模块通常包括但不限于以下这些: 1. **DBI** 和 **DBD::mysql**...

    Perl.Cookbook

    - **SMTP/POP3/IMAP**:探讨邮件协议及其在Perl中的应用。 - **DNS解析**:介绍DNS解析机制及其在Perl中的实现。 ##### 第19章:CGI编程 - **CGI基础**:介绍CGI(Common Gateway Interface)的概念。 - **CGI环境...

    perl技术内幕(英文版)+源代码

    第15章 Perl/TK——窗口、按钮及其他 第16章 数据结构和数据库 第17章 创建包和模块 第18章 创建类和对象 第19章 面向对象编程 第20章 INTERNET和套接字编程 第21章 CGI编程:GGI.PM 第22章 CGI:创建WEB计数器、来宾...

    Perl 语言入门(第四版)

    ### Perl语言入门(第四版):详尽解析与学习指南 #### 一、Perl语言概览 **1.1 Larry Wall为何创建Perl** Perl由Larry Wall于1987年开发,初衷是为了解决文本处理和数据报告的问题。Larry Wall在设计Perl时,旨在...

    perl参考大全

    - **电子邮件处理**:Perl支持发送和接收电子邮件,Net::SMTP 和 Email::Sender 是常用的邮件处理模块。 #### 七、数据库应用 - **DBI模块**:Perl DBI (Database Interface) 提供了一个通用的数据库访问层,可以...

    perl intro

    这些包和模块覆盖了从网络编程、数据库接口、图形用户界面到科学计算等各个领域,极大地扩展了Perl的功能范围。 #### 面向对象编程(OOP) Perl支持面向对象编程,尽管它的OOP模型与一些其他语言有所不同。Perl的类...

    An Introduction to Perl Regular Expressions in SAS

    在本文档中,我们要讨论的是Perl正则表达式在SAS中的应用,即在SAS软件中如何使用Perl风格的正则表达式来进行模式匹配和字符串操作。 首先,要了解SAS(Statistical Analysis System)是统计分析和商业智能的软件...

    PERL 编程24学时教程(PDF).zip

    Perl还提供了丰富的模块生态系统,如DBI(数据库接口)模块,用于与各种数据库进行交互,以及CGI模块,用于开发Web应用程序。 Perl的面向对象编程(OOP)也是24学时教程的重要部分。你将了解类、对象、继承、封装和...

Global site tag (gtag.js) - Google Analytics