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

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 还在许多其它方面协助你。和严格的每次执行一条命令的命令文件和 ...

    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 需要在你的路径中的某个地方。 例子 ...

    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. 列...

    Homework4:这与Java,C,C ++,Perl等作业有关

    作业4 该家庭作业与C,C ++,JAVA,PERL有关问题1 编写一个包含以下语句序列的C函数:#x ... 此代码应将一个文件作为输入,并为以下词素处理该文件:•Perl样式标识符问题5 Perl既允许静态范围也允许动态范围。 编写一

    WEB安全测试

    5.5 测试对URL长度的处理 94 5.6 编辑Cookie 96 5.7 伪造浏览器头信息 99 5.8 上传带有恶意文件名的文件 101 5.9 上传大文件 104 5.10 上传恶意XML实体文件 105 5.11 上传恶意XML结构 107 5.12 上传恶意ZIP文件 109 ...

Global site tag (gtag.js) - Google Analytics