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查询,按城市生成不同的表再导出,很快你打消这个念头,工作量大,如果城市众多,手工将生成的表导出几乎不可能。用C、C++、Pascal、java等高级语言确实完成这个任务,但代码量较大,使用Perl,10多行就能搞定。请允许我在此卖个关子,我们先了解一下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中了。say和print的不同之处在于: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,数组每个元素是文件的一行。

 

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

   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>

 

 

Perl语言的字符串处理 Perl的字符串处理功能非常强大,能够满足我们在文本处理中的多种需求。从基本的字符串操作到复杂的正则表达式,Perl的灵活性和高效性都使得它成为了文本处理的首选工具之一。通过理解和掌握Perl中的字符串处理方法,程序员可以更加自如地处理各种文本数据,也为其他语言中字符串的处理提供了宝贵的经验。应用Perl进行字符串处理,无论是简单的文本操作还是复杂的文本分析,都能展现出高效与优雅,是进行数据处理的理想选择。 阅读详情

相关推荐

Perl编程中的输入输出处理方法

本文将探讨Perl编程中输入输出处理的基本方法。我们将会了解程序参数的使用,文件句柄的创建和管理,以及如何安全地读写文件。此外,本文还介绍了如何利用内置文件句柄和文件测试操作符来优化数据处理流程。

weixin_42298254的博客 512

Perl 输入输出

Perl中输入输出分两类,一类是键盘输入和显示屏输出,另一类是读和写文件。

weixin_43664101的博客 1331

一文掌握python图形界面开发PyQt6--(一)基本操作、控件、信号与槽、常用控件、布局管理、事件处理、文件对话框

一文掌握python图形界面开发PyQt6--(一)基本操作、控件、信号与槽、常用控件、布局管理、事件处理、文件对话框

qq_38120851的博客 4047

perl的输入与输出

读取标准输入():键盘输入,回车分行,Ctrl+C截止     例:         while(){             print "I saw $_";         }         foreach(){             print "I saw $_";         }     简单写法,将输入处理到结尾,不同的是while是取一行处理一行,

笨蛋一小枚 5770

多目标跟踪中使用trackeval评估dancetrack运行结果

trackeval使用

qq_46144849的博客 1783

Linux CentOS7文件系统(/dev/var)的容量扩充

原因是之前安装docker后,再想安装Nessus,系统说home、var文件系统的内存都不够。

JHoanna的博客 3226

Perl 输入输出,参数给入,文件读写,文件夹操作

#!/usr/bin/perl-w##########################################################################FileName:test2.pl#Author: xuehuikuaile#CreatedTime:2018年02月20日 #################...

weixin_33724570的博客 623

iTunes登录协议逆向与自动化实现

本文详细解析了iTunes登录协议的逆向工程与自动化实现方法,涵盖请求体构造、签名生成和会话管理等关键技术。通过XML结构解析、X-Apple-ActionSignature生成原理及完整登录流程实现,帮助开发者高效完成iTunes自动化登录,提升工作效率。

weixin_26938645的博客 941

perl处理输入和输出-3

声明:本神奇的Perl系列为刘兴(http://deepfuture.iteye.com/)原创,未经笔者授权,任何人和机构不能转载 这段程序有几处耐人寻味:1、($name,$price)=split(',',$carmes);($name,$price)表示一个列表,列表可以理解为标量的有序集合,列表存储着数据的集合,而数组可理解为存储着列表的变量。列表可用用(元素1,元素 2,元素 3,„...

深未来技术 232

基于FFT+BP神经网络/决策树的轴承故障诊断

基于FFT+BP神经网络/决策树的轴承故障诊断

天天酷科研的博客 133

Ultralytics YOLOv8 英伟达™ Jetson®处理器部署

英伟达™(NVIDIA®)Jetson 是一系列嵌入式计算板卡,旨在为边缘设备带来加速的 AI(人工智能)计算。这些小巧而功能强大的设备围绕英伟达™(NVIDIA®)的GPU架构打造,能够直接在设备上运行复杂的人工智能算法和深度学习模型,而无需依赖云计算资源。Jetson 板卡通常用于机器人、自动驾驶汽车、工业自动化和其他需要在本地以低延迟和高效率执行人工智能推理的应用中。此外,这些板卡基于 ARM64 架构,与传统 GPU 计算设备相比运行功耗更低。英伟达™(NVIDIA®)JetPack SDK。

机器人控制与仿真应用 3878

perl输入输出

1.从标准输入设备输入 为行输入操作,但其实际上是对一个文件句柄(filehandle)的行输入操作(有 $line = ; #读入下一行; chomp($line); #去掉结尾的换行符 chomp($line=) #同上,更常用的方法 由于,行输入操作在到达文件的结尾时将返回undef,这对于从循环退出时非常方便的: while (defined($line = )) { pri

mikiah的专栏 1万+

【部署】Kimi 接入OpenClaw完整步骤及关键注意事项

本文详细介绍了如何将Kimi AI接入OpenClaw系统的完整步骤。首先需确保环境满足OpenClaw版本要求和系统支持,然后通过配置向导完成本地网关设置和Kimi模型接入,包括API密钥配置。文章提供了详细的命令操作和界面截图指导,并重点说明了安全警告处理、服务状态检查、API密钥有效性验证等关键注意事项。最后还展示了Kimi流量消耗明细和问题排查方法,帮助用户顺利完成接入并解决常见问题。整个流程清晰明了,涵盖了从环境准备到最终验证的全部环节。

海兰 7209

perl的输入输出

标准输入<STDIN> <STDIN>表示从标准输入中读取内容,如果没有输入会继续等待,默认读取的内容会带换行符;

bleauchat的博客 3094

【代码版本管理】SVN(Subversion)

认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!本文先对SVN(Subversion)代码版本管理做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章提示:以下是本篇文章正文内容。

qq_35635374的博客 668

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

perl脚本语言学习1——基础篇:变量、数组、哈希数组、循环、文件、函数

介绍perl语言的基础知识,包括变量、函数、文件操作、循环控制等

qq_42135020的博客 5522

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

perl—数据预处理(1)

[点评:Perl语言的最适合的是“约90%是文字处理,约10%是其他事物处理”。这里给出一些集成开发环境,做为学习及工作的参考工具.] EngInSite Perl http://www.enginsite.com/Perl.htm 一款允许创建、编辑、运行和调试 Perl 脚本的软件 DzSoft Perl Editor http://www.dzsoft.com/ 一 套在 W

CWenliangZhong的博客 468

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

18. Perl 标准输入输出

默认情况下, Perl 程序标准输入为键盘输入, 标准输出为终端显示器. 1. 标准输入 使用 可以获取用户从键盘输入的一行信息, Enter 键结束输入, 输入结果包含换行符 通常会使用chomp函数去掉行尾的换行符, 使用标量接收键盘输入, 然后再做后续处理 #常见用法 print "please input :"; chomp($line=<STDIN>); print "y...

Java 程序源 8278

用PERL处理二进制标量

 PERL Handling Binary Scalar1 [Question]:I adopt select()...sysread()...syswrite() mechanism to handle socket messages, where messages are sysread() into $buffer (binary) before they are

Bo Yang's Blog 2099

使用Perl并行处理大文件

使用Perl并行处理大文件 前言 有时候会需要对大文件进行并行处理,但是perl中不像其他的语言,可以使用多线程,perl的多线程其实就是对文件进行切割; 正文 快速跳过 对于文本文件,需要保证行的完整性,一种是快速跳过不需要的行: #!/usr/bin/perl -w use strict; no warnings 'recursion'; my $m=$ARGV[0]; #分成m份 my $l=$ARGV[1]; #第l份 my $file="test1.txt"; my $line=`wc -l

yuyuena的专栏 1257

Perl 语言开发(九):深入探索Perl语言的文件处理

Perl以其强大的文本处理能力而闻名,在文件处理方面表现尤为突出。无论是读取、写入、修改文件内容,还是进行复杂的文件操作,Perl都能轻松应对。这篇文章将详细介绍如何在Perl中进行文件处理,从基础操作到高级技巧,帮助你充分利用Perl的强大功能,提高开发效率。

1951

perl 匹配文件行数_Perl —— 输入输出&子程序&正则表达

6、输入与输出重要!!!这里的EOF可以自己更改,自己编写的。#!/usr/bin/perl-wusestrict;print"Pleaseinputyourname:";chomp(my$name=);#记得把换行符删掉print"Yournameis$name\n";只读取键盘输入的一行,自动有一个换行符,记得去掉!!!输出:sqc@DESKTO...

weixin_39642619的博客 324

perl: 输入输出

输入和输出:   操作符:用来从STDIN读入数据: 如果读到文件结尾行输入符就会返回undef.   $line = ;    #读取下一行. chomp($line =);    #去掉输入的一行的最后的换行符 while () {     print “$_”; } foreach () {     print “$_”; }   print函数:用来将信息

587

【Perl文本处理之光】揭秘Perl在文本处理中的卓越特性

Perl的文本处理能力是其最突出的特点之一。本文详细介绍了Perl在文本处理方面的特性和优势,并通过代码示例展示了Perl的实际应用。希望本文能够帮助读者更好地理解Perl的文本处理能力,并在实际工作中发挥其潜力。本文深入探讨了Perl在文本处理方面的强大特性,从正则表达式到内置函数,再到社区支持和模块生态,提供了全面的指导和代码示例。通过本文的学习,读者将能够掌握Perl的文本处理技巧,并在实际编程中有效利用Perl进行文本处理。希望本文能成为您在使用Perl进行文本处理时的得力助手。

2401_85762266的博客 758
上一篇: perl-智能操作符和given
下一篇: 中文unicode大全
deepfuture
博客等级 码龄17年 211粉丝 1287原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值