`
deepfuture
  • 浏览: 4350775 次
  • 性别: Icon_minigender_1
  • 来自: 湛江
博客专栏
073ec2a9-85b7-3ebf-a3bb-c6361e6c6f64
SQLite源码剖析
浏览量:79583
1591c4b8-62f1-3d3e-9551-25c77465da96
WIN32汇编语言学习应用...
浏览量:68769
F5390db6-59dd-338f-ba18-4e93943ff06a
神奇的perl
浏览量:101974
Dac44363-8a80-3836-99aa-f7b7780fa6e2
lucene等搜索引擎解析...
浏览量:282224
Ec49a563-4109-3c69-9c83-8f6d068ba113
深入lucene3.5源码...
浏览量:14712
9b99bfc2-19c2-3346-9100-7f8879c731ce
VB.NET并行与分布式编...
浏览量:66139
B1db2af3-06b3-35bb-ac08-59ff2d1324b4
silverlight 5...
浏览量:31486
4a56b548-ab3d-35af-a984-e0781d142c23
算法下午茶系列
浏览量:45407
社区版块
存档分类
最新评论

Perl处理输入输出-1

阅读更多

声明:本神奇的Perl系列为刘兴(http://deepfuture.iteye.com/)原创,未经笔者授权,任何人和机构不能转载

 

1.第一个Perl任务

我们先放松想像一下:你是公司一个普通的开发人员,一大早,阳光明媚,你急不可待打开QQ,跟最近泡上的MM聊天。此时项目组长急勿勿过来了,交给你一个紧急任务,将perl1-2.txt中的人员按城市分别存为几个文本文件,文件名是城市名,文本内容如下:

刘欢欢,20,长沙#冯军,25,上海#李兵,21,北京#李军,23,北京#李志,27,北京#黄王兵,29,长沙#赵兵,22,上海#李强兵,25,上海。。。。。。。

你不禁倒吸一口凉气,天呀,又要编写一大堆代码来完成这个任务,而且还要读写文件,好久没操作文件IO了,有些命令都忘了。你也许足够聪明,想到干脆把perl1-2.txt导入到数据库中,然后运行SQL查询,按城市生成不同的表再导出,很快你打消这个念头,工作量大,如果城市众多,手工将生成的表导出几乎不可能。用CC++Pascaljava等高级语言确实完成这个任务,但代码量较大,使用Perl10多行就能搞定。请允许我在此卖个关子,我们先了解一下Perl的输入输出基础,回头再来解决这个任务。

Perl语言具有以下基本特点:

1、Perl#表示后面的内容为注释。

2、Perl语句用;表示结束。

3、Perl程序通常以pl结尾,如果是做为Apache容器中的cgi程序来执行脚本,必须为脚本文件名提供.pl.cgi扩展名。

4、Perl对变量的表示方式非常简洁:

1)Perl不要求变量有类型。

2)对于数组、列表,采用以@后接变量名表示,比如@names。

3)对于保存单个值的变量,采用$后接变量名表示,称之为标量,比如$name

4)对于哈希变量,采用%后接变量名表示。

5、你可以选择这种方式执行Perl程序,在命令行中输入:

perl 程序名

2.Perl的文件处理原则 

    Perl的文件处理很简单,只需掌握以下2个原则:

   1、打开文件使用open,关闭文件使用close,使用print向文件输出内容。

   2>表示写,<表示读,>>表示在原有内容上增加,Perl使用这几个符号来表示对文件的处理方式。

   比如:

   1)读取文件(FH表示文件句柄,以下几个例子均是):

   open (FH,“<文件名”);

   2)写入文件,写入之前,如果文件已经存在,则删除它,重新建立一个新的。

   open (FH,“>文件名”);

   3)打开一个文件并增加内容。如果文件不存在,则建立一个文件再打开。如果已经存在则直接打开。

   Open (FH,”>>文件名”);

   3、关闭一个文件

   Close (FH);

 3.读取文本文件

我们首先试试看能不能按每人每行来读取并显示文件内容

   use 5.010;

   open FH,'<.\perl1-2.txt';

   $mytext=<FH>;

   @peoples=split '#',$mytext;

foreach  $people(@peoples){
      say $people;
   }
   close FH;

  运行一下,效果不错

 刘欢欢,20,长沙
 
冯军,25,上海
 
李兵,21,北京
 
李军,23,北京
 
李志,27,北京
 
黄王兵,29,长沙
 
赵兵,22,上海
 
李强兵,25,上海

 我们来解释一下这段perl程序:

 1行:use后接perl的版本号,表示使用perl5.1

 2行:打开一个文件,并给予一个文件句柄,Perl对文件的处理方式是操作文件句柄,而不直接操作文件名,你可以把它理解为一个文件的别名。根据Perl的文件处理的第2个原则,perl1-2.txt表示处理的文件名,<是处理方式为读取。open的调用方式为open 句柄,处理方式后接文件名

3行:这一行表示打开FH文件句柄所代表的文件,然后,把文件内容赋值给$mytext变量。

4行:从变量名的前缀@可以看出@peoples是一个数组,那么split('#', $mytext)是什么?split是一个函数,这个函数的功能是从$mytext变量的文本中取得被#分割的部分,即每个人的具体情况,每个部分做为数组的一个元素。

第5行:foreach表示从一个循环,在循环中每次从@peoples数组中取得一个元素值给$people,

第6行:循环体,唯一的任务就是将每个取得的元素打印出来,因为这些元素已经放在$people中了。sayprint的不同之处在于:say在输出时会在结尾处加上一个换行,print不会。如果使用print,可以将say $people;改成print “$people\n”;

细心的你一定发现了 “$people\n”这种写法,$people不是变量名吗,怎么能直接放在双引号中呢,Perl管这个叫变量内插,在双引号的变量最后会以变量值表示。

7行:循环结束

8表示关闭文件句柄FH

4.单引号与双引号

等等,还有问题,单引号呢?除了双引号,单引号也可以表示字符串呀,答案是单引号内的变量不会内插,会直接以变量名表示。最后一个小提示,在Perl字符串的连接可以使用小数点符号.解决。如:“hello,”.’”’world”表示’”’helloworld”。

这节结束之前我们把上面代码改一下,看看单引号和双引号的区别:

   use 5.010;

   $|=1;

   open FH,'<.\perl1-2.txt';

   $mytext=<FH>;

   @peoples=split '#',$mytext;

   foreach  $people(@peoples){

      print '$people:'."$people\n";

   }

   close FH;

从以下运行结果可以看出,单引号直接将变量名显示出来了。

$people:刘欢欢,20,长沙

$people:冯军,25,上海

$people:李兵,21,北京

$people:李军,23,北京

$people:李志,27,北京

$people:黄王兵,29,长沙

$people:赵兵,22,上海

$people:李强兵,25,上海

 从上面程序中,你也许看出来了:

 

   1、“=”这个符号太神奇了,后面接文件句柄,就能读取文件

  $mytext=<FH>;

  但是,上面这个语句只适于文件只有一行的情况(所谓一行是指从行首一直到换行符为止),因为$mytext是标量,只能保存一个元素。 文件超过一行,应使用数组方式:

   @myext=<FH>;#Perl返回所有内容给@mytext,数组每个元素是文件的一行。

 

   2foreach更神奇了,可以自动从数组中抽取元素。

   foreach  $people(@peoples){

      say $people;

   }

5.小试牛刀

   学以致用,我们尝试一下:读取ActivePerl目录下的Copyright.html。

 

  #perl1-4.pl

  #笔者的ActivePerl安装在d盘下

  use 5.010;

  open FH,'<D:/Perl/html/Copyright.html';

  @mytexts=<FH>;

 

  foreach  $mytext(@mytexts){

    print $mytext;

  }

 

  网页文件成功显示了:

 

 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0  Transitional//EN">

 

<html>

 

<head>

<!-- saved from url=(0017)http://localhost/ -->

<script language="JavaScript" src="./displayToc.js"></script>

<script language="JavaScript" src="./tocParas.js"></script>

<script language="JavaScript" src="./tocTab.js"></script>

<title>Welcome to ActivePerl</title>

<link rel="stylesheet" href="Active.css" type="text/css">

</head>

 

 

1
1
分享到:
评论

相关推荐

    perl 程序开发教程

    一、文件输入/输出函数 1、基本I/O函数 1)open函数 2)用open重定向输入 3)文件重定向 4)指定读写权限 5)close函数 6)print, printf和write函数 7)select函数 8)eof函数 9)间接文件变量 2、跳过和重读...

    Perl语言入门-第六版

    这是一本perl入门的经典书籍,《perl语言入门第六版》,由施瓦茨、福瓦等人编著,东南大学出版社出版,主要内容涵盖perl的基本语法、输入与输出、哈希、正则表达式等,书中...利用perl处理文本数据会是你的工作事半功倍

    perl技术内幕,perl黑皮书

    第12章 内置函数:输入/输出 第13章 内置函数:文件处理 第14章 标准模块 第15章 Perl/TK——窗口、按钮及其他 第16章 数据结构和数据库 第17章 创建包和模块 第18章 创建类和对象 第19章 面向对象编程 第20...

    perl常见问题解答

    I/O(输入/输出)及各 ``f''事项:filehandles(档案控制把手)、flushing (洗清)、 formats (报表格式化),及 footers(注脚制作)。 perlfaq6:正规表示法 (Regexps) 模式对应及正规表示法。 perlfaq7:...

    Perl语言入门(第五版-中文版).pdf

    perl的最初目标只是为了协助unix系统管理员完成日常繁琐的文本数据处理工作。时至今日,perl已发展成为一套功能齐备的程序语言,几乎可以在任何操作系统上完成各种任务——从简单的命令行工具到web应用开发,及至...

    PERL语言编程

    通过模块输入机制,你可以把这些外部的扩展当做内置于 Perl 的特性。那些面向对象的外部库在 Perl 内部仍然保持面向对象的特征。 &lt;br/&gt;Perl 还在许多其它方面协助你。和严格的每次执行一条命令的命令文件和 ...

    Perl语言程序设计:第1章 Perl语言简介.ppt

    Perl 语言的主要内容包括变量类型、控制结构、子程序、文件的操作、正则表达式、智能匹配、字符串的操作、输入与输出、进程的管理、第三方模块的使用等。 第一个 Perl 程序 用户可以使用 Perl 语言编写第一个程序...

    Network Programming With Perl

    第1章 输入输出基础 第2章 进程、管道和信号 第3章 Berkeley套接字简介 第4章 TCP协议 第5章 IO:: Socket API 第2部分为公共服务开发客户 第6章 FTP和Telnet 第7章 SMTP:发送邮件 第8章 POP,IMAP和NNTP:...

    Perl5语言全教程

    一、文件输入/输出函数 1、基本I/O函数 1)open函数 2)用open重定向输入 3)文件重定向 4)指定读写权限 5)close函数 6)print, printf和write函数 7)select函数 8)eof函数 9)间接文件变量 2、跳过和重读...

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

    第12章 内置函数:输入/输出 第13章 内置函数:文件处理 第14章 标准模块 第15章 Perl/TK——窗口、按钮及其他 第16章 数据结构和数据库 第17章 创建包和模块 第18章 创建类和对象 第19章 面向对象编程 第20章 ...

    Perl语言入门

    《Perl语言入门》(作者施瓦茨、福瓦、菲尼克斯)从最基础的开始教起,然后逐渐深入,让你慢慢能够自行编写多至128行的程序——如今90%的Perl程序差不多都是这般大小,全书包括输入与输出;用正则表达式处理文本;...

    Perl 语言入门 第六版

    第五章输入与输出 读取标准输入 来自钻石操作符的输入 调用参数 输出到标准输出 JNprintf格式化输出 数组和printf 文件句柄 打开文件句柄 以二进制方式读写文件句柄 有问题的文件句柄 关闭文件句柄 用...

    Advanced Bash-Scripting Guide <>

    11-1. 作业标识符 30-1. Bash 选项 33-1. 转义序列中数值和彩色的对应 B-1. Special Shell Variables B-2. TEST Operators: Binary Comparison B-3. TEST Operators: Files B-4. Parameter Substitution and ...

    Perl语言入门_中文版_第六版

    《Perl语言入门》(作者施瓦茨、福瓦、菲尼克斯)从最基础的开始教起,然后逐渐深入,让你慢慢能够自行编写多至128行的程序——如今90%的Perl程序差不多都是这般大小,全书包括输入与输出;用正则表达式处理文本;...

    Linux高级bash编程

    33-1. 转义序列中数值和彩色的对应 B-1. Special Shell Variables B-2. TEST Operators: Binary Comparison B-3. TEST Operators: Files B-4. Parameter Substitution and Expansion B-5. String Operations B-6. ...

    Perl高级教程人称“大骆驼”(免费)

    第一章 Perl概述............................................................................................................................10 1.1 从头开始.................................................

    iconv-chunks:使用 iconv 处理大文件

    这个脚本只是一个包装器,它以可管理的块处理输入文件并将其写入标准输出。 第一个参数是输入文件名(使用 - 指定标准输入)。 其他任何内容都会传递给 iconv。 真正的 iconv 需要在你的路径中的某个地方。 例子 ...

    什么是CGI、FastCGI、PHP-CGI、PHP-FPM、Spawn-FCGI.pdf

    4. FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。 FastCGI的优点: 1. 性能高 2. 可伸缩性好 3. Fail-Over特性好 FastCGI的不足: 1. 多进程消费更多的服务器内存 2. PHP-CGI解释器每...

    MySQL5.1参考手册官方简体中文版

    3.2. 输入查询 3.3. 创建并使用数据库 3.3.1. 创建并选择数据库 3.3.2. 创建表 3.3.3. 将数据装入表中 3.3.4. 从表检索信息 3.4. 获得数据库和表的信息 3.5. 在批处理模式下使用mysql 3.6. 常用查询的例子 3.6.1. 列...

Global site tag (gtag.js) - Google Analytics