Perl 中的钻石操作符

8 篇文章 0 订阅

Perl 中的钻石操作符

经常会遇到需要读取某些文件的内容的时候,在 Perl 中,可以用 <STDIN> 开启一个输入流,比如下面的代码

while(<STDIN>){
    print "$_";
}

运行它,将会开启一个标准输入流,按下回车后,就会打印输入流中的信息。

while 的作用是不断的读取标准输入流中的数据并打印。在没有确认之前,标准输入流始终是开启的,在按下回车之后,才会执行下一次的循环。

这里稍微说一下一个有意思的地方,假如把 while 换成 foreach,结果就会相当不同了。

foreach(<STDIN>){
    print "$_";
}

你会发现每次按完回车之后,它不会立即打印你想要的东西,当你按下 ctrl + D 的时候,它会把刚才输入的所有数据全部打印出来。

这是因为 foreach 会预先加载目标的所有数据,因为标准输入流始终没关闭,所以,它会认为还有数据,循环体始终进不去,当按下ctrl + D 的时候,才开始执行,它实际上只执行了一次循环体。

来实现一个 cat

在 Unix 系统中,有个特别好用的工具叫 cat,这个工具能窥探文件的内容

cat helloworld

这句命令会将 helloworld 文件中的内容输出到标准输出流中。

下面来用 perl 来实现一个 cat (只是简单的窥探文件内容的功能)

print <>;

what ?? 就一行代码,不是在逗我吧?

上面的 <> 叫做钻石操作符,这是 perl 特有的东西,它逐行读取命令行参数指定的文件,然后返回读取的内容,于是如果使用 print <>,就能直接打印参数列表指定的文件的内容了

perl cat.perl helloworld

这样会打印 helloworld 的文件内容,如果参数列表有不止一个参数,会首先读取第一个参数,处理完毕后再读取第二个。

介入读取

如果想介入读取过程的话,比如想在每行读取过后追加一个换行符,那么可以用 while 进行处理

while(<>){
    print "$_\n";
}
目录 第一章简介 问题与答案 这本书适合你吗? 为何有这么多的脚注? 关于习题和解答? 习题前标的数字是什么意思? 如果我是Perl讲师? “Perl”这个词表示什么意思? Larry为什么要创造Perl? Larry干吗不用其他语言? Perl算容易,还是算难? Perl怎么会这么流行? 现在的Perl发展得怎么样了? 哪些事情最适合用Perl来做? 哪些事情不适合用Perl来做? 如何取得Perl? CPAN是什么? 如何得到Perl的技术支持? 还有别的技术支持方式吗? 如果发现Perl有bug,我该怎么办? 我该怎么编写Perl程序? 一个简单的程序 程序里写的是什么? 我该如何编译Perl程序? 走马观花 习题 第二章标量数据 数字 所有数字的内部格式都相同 浮点数直接量 整数直接量 非+进制整数的直接量 数字操作符 字符串 单引号内的字符串直接量 双引号内的字符串直接量 字符串操作符 数字与字符串之间的自动转换 Perl的内置警告信息 标量变量 给变量取个好名字 标量的赋值 双目赋值操作符 用print输出结果 字符串的标量变量内插 借助代码点创建字符 操作符的优先级与结合性 比较操作符 if控制结构 布尔值 获取用户输入 chomp操作符 while控制结构 undef值 defined函数 习题 第三章列表与数组 访问数组的元素 特殊的数组索引 列表直接量 qw简写 列表的赋值 pop和push操作符 shift和unshift操作符 splice操作符 字符串的数组内插 foreach控制结构 Perl最喜欢用的默认变量:$_ reverse操作符 sort操作符 each操作符 标量上下文与列表上下文 在标量上下文使用产生列表的表达式 在列表上下文使用产生标量的表达式 强制指定标量上下文 列表上下文的 习题 第四章子程序 定义子程序 调用子程序 返回值 参数 子程序的私有变量 变长参数列表 改进的&max子程序 空参数列表 关于词法(my)变量 use strict编译指令 return操作符 省略与号 非标量返回值 持久化私有变量 习题 第五章输入与输出 读取标准输入 来自钻石操作符的输入 调用参数 输出到标准输出 JNprintf格式化输出 数组和printf 文件句柄 打开文件句柄 以二进制方式读写文件句柄 有问题的文件句柄 关闭文件句柄 用die处理致命错误 用warn输出警告信息 自动检测致命错误 使用文件句柄 改变默认的文件输出句柄 重新打开标准文件句柄 用say来输出 …… 第六章哈希 第七章漫游正则表达式王国 第八章用正则表达式进行匹配 第九章用正则表达式处理文本 第十章其他控制结构 第十一章Perl模块 第十二章文件测试 第十三章目录操作 第十四章字符串与排序 第十五章智能匹配与given—when结构 第十六章进程管理 第十七章高级Perl技巧 附录
Perl语言入门(第五版),本书是为文版本,英文原版下载地址:http://download.csdn.net/source/2801846。 原书名: Learning Perl, 5th Edition;原出版社: O'Reilly Media, Inc. ;作者: Randal L.Schwartz Tom Phoenix brian d foy;译者: 盛春 蒋永清 王晖;出版社:东南大学出版社 内容简介 《perl语言入门》也就是大家所称道的“小骆驼书”,是perl程序设计人员最为仰赖的启蒙读物之一。自1993年以来,这本书就成为热卖的perl语言教学材料,而此次新版又涵盖了perl 5.10的最新变化。本书的诸位作者自1991年起就开始在stonehenge consulting从事perl教学工作,多年的课堂教学实践和积累下来的点滴经验,形成了本书特有的教学节奏,以及务实的知识点取舍。随文而至的习题,可以让你及时巩固各种概念,强化理解和吸收。本书内容涵盖:. ·perl的变量类型 ·子程序 ·文件的操作 ·正则表达式 ·字符串的操作.. ·列表与排序 ·进程的管理 ·智能匹配 ·第三方模块的使用 有些人只是想要完成任务,perl语言为此而生。perl的最初目标只是为了协助unix系统管理员完成日常繁琐的文本数据处理工作。时至今日,perl已发展成为一套功能齐备的程序语言,几乎可以在任何操作系统上完成各种任务——从简单的命令行工具到web应用开发,及至生物信息学、金融数据分析等等不一而足。其他书籍可能会着重于教会你使用perl语言来编程,可本书不同,我们是想要你成为一名真正的perl程序员。... 目录 前言. 第1章简介 问题与答案 “perl”这个词是什么意思? 如何取得perl? 我该怎么编写perl程序? 走马观花 习题 第二章标量数据 数字 字符串 perl内建警告信息 标量变量 用print输出结果 if控制结构 获取用户输入 chomp操作符 while控制结构 习题 第三章列表与数组 .访问数组的元素 特殊的数组索引值 列表直接量 列表的赋值 字符串的数组内插 foreach控制结构 标量上下文与列表上下文 列表上下文的(stdin) 习题 第四章子程序 定义子程序 调用子程序 返回值 参数 子程序的私有变量 长度可变的参数列表 关于词法(my)变量 use strict编译命令 return操作符 非标量返回值 持久性私有变量 习题 第五章输入与输出 读取标准输入 钻石操作符输入 调用参数 输出到标准输出 使用printf格式化输出 文件句柄 打开文件句柄 用die处理严重错误 使用文件句柄 复用标准文件句柄 使用say来输出 习题 第六章哈希 什么是哈希? 访问哈希元素 哈希函数 哈希的典型应用 %env哈希 习题 第七章漫游正则表达式王国 什么是正则表达式? 使用简易模式 字符集 习题 第八章以正则表达式进行匹配 以m//进行匹配 可选修饰符 锚位 绑定操作符=~ 模式串的内插.. 捕获变量 通用量词 优先级 模式测试程序 习题 第九章用正则表达式处理文本 用s///替换 可选修饰符 split操作符 join函数 列表上下文的m// 更强大的正则表达式 习题 第十章其他控制结构 unless控制结构 until控制结构 条件修饰词 裸块控制结构 elsif子句 自增和自减 for控制结构 循环控制 三目操作符?: 逻辑操作符 习题 第十一章perl模块 寻找模块 安装模块 使用简单模块 习题 第十二章文件测试 文件测试操作符 localtime函数 按位运算操作符 习题 第十三章目标操作 在目录树移动 文件名通配 文件名通配的另一种语法 目录句柄 递归的目录列表 操作文件与目录 删除文件 重命名文件 链接与文件 建立及移除目录 修改权限 更改隶属关系 修改时间戳 习题 第十四章字符串与排序 在字符串内用index搜索 用substr处理子串 高级排序 习题 第十五章智能匹配与given-when结构 智能匹配操作符 智能匹配操作的优先级 given语句 多个项目的when匹配 习题 第十六章进程管理 system函数 exec函数 环境变量 用反引号捕获输出结果 将进程视为文件句柄 用fork开展地下工作 发送及接收信号 习题 第十七章高级perl技巧 用eval捕获错误 用grep来筛选列表 用map对列表进行转换 不带引号的哈希键 切片 习题 附录a习题解答 附录b超越小骆驼...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值