声明:本神奇的Perl系列为刘兴(http://deepfuture.iteye.com/)原创,未经笔者授权,任何人和机构不能转载
6.say、print、<STDIN>与Chomp
2个新疑问产生了,这里为什么不用say,好吧,我们通过下面的小例子解释这一切
新建一个perl1-4.txt的文本文件,内容如下:
第1行
第2行
第3行
第4行
我们分别用say和print完成对这个文件的读取
say版本:
#perl1-4.pl
#笔者的ActivePerl安装在d盘下
use 5.010;
open FH,'<./perl1-4.txt';
@mytexts=<FH>;
foreach $mytext(@mytexts){
say $mytext;
}
程序运行结果如下:
第1行
第2行
第3行
第4行
print版本:
#perl1-5.pl
#笔者的ActivePerl安装在d盘下
use 5.010;
open FH,'<./perl1-4.txt';
@mytexts=<FH>;
foreach $mytext(@mytexts){
print "$mytext";
}
程序运行结果如下:
第1行
第2行
第3行
第4行
say版本在每行后输出一个回车换行,因为perl1-4.txt文件本身每行有一个换行符,因此,每读取文件一行就会多输出1行,这也是say和print的主要区别。某些情况下,我们并不需要换行符,即使有换行符也要去掉,有一个函数能帮我们这个忙:chomp。我们打开 perl1-5.txt,可以看到内容如下:
西红柿
黄瓜
丝瓜
冬瓜
白菜
鸡蛋
我们完成一个小任务,将这些人名在一行内输出
#perl1-6.pl
use 5.010;
open FH,'<./perl1-4.txt';
@mytexts=<FH>;
foreach $mytext(@mytexts){
chomp($mytext);
print “$mytext,”;
}
输出如下:
西红柿 黄瓜 丝瓜 冬瓜 白菜 鸡蛋
因为foreach循环一次,从@mytexts中取得下一个元素放在$mytext中,这个过程并不包括删除每个元素的换行符,这个例子中每个元素就是一行,自然包括换行符,所以必须要使用chomp函数去掉末尾的换行符:chomp($mytext)。
Chomp还有一个地方用得最多,就是接受用户输入时。Perl处理用户键盘输入的语句形式如下:
变量=<STDIN>
我们先看一段程序,这段程序的本意是接受用户输入,并将用户和用户的表妹的年纪在一行内显示出来。
#perl1-7.pl
print "你表妹多大了?";
$myinput1=<STDIN>;
print "你今年多大了?";
$myinput2=<STDIN>;
print "你的年纪是$myinput1,";
print "你表妹的年纪是$myinput2。";
$myinput=<STDIN>;
上面程序中的$myinput1=<STDIN>表示接受输入,并将输入的内容赋值给$myinput1。输出结果如下:
你表妹多大了?15
你今年多大了?22
你的年纪是15
,你表妹的年纪是22
程序并没有按想像中的运行,用户和其表妹的年纪在2行内显示出来,因为Perl接受输入,但并不包括清除用户完成输入最后敲入的换行符。因为应去掉$myinput1所含的换行符。程序修改如下:
#perl1-8.pl
print "你表妹多大了?";
$myinput1=<STDIN>;
print "你今年多大了?";
$myinput2=<STDIN>;
chomp($myinput1);
print "你的年纪是$myinput1,";
print "你表妹的年纪是$myinput2";
输出结果如下,任务完成。
你表妹多大了?15
你今年多大了?22
你的年纪是15,你表妹的年纪是22。
7.读取每行的多列数据
上面的例子涉及的都是单列数据,而多数情况下,我们需要读取文件的多列数据。
我从朋友那得到一份北京现代汽车的报价清单,做为消费者,想从中挑选出10-15万的车型,并显示出来。
清单文件为perl1-9.csv,内容如下:
伊兰特 悦动1.6GL手动舒适型2010款,9.98
伊兰特 悦动1.6GL自动舒适型2010款,10.88
伊兰特 悦动1.6GLS手动豪华型2010款,10.98
伊兰特 悦动1.6GLS自动豪华型2010款,11.98
伊兰特 悦动1.8GLS手动豪华型2010款,12.18
伊兰特 悦动1.8GLS自动豪华型2010款,12.98
……
…...
仔细观察可以发现,型号和价格是用“,”分隔,我们再次使用split函数。
#perl1-9.pl
use 5.010;
open CAR,'<.\perl1-9.csv';
foreach $carmes(<CAR>){
($name,$price)=split(',',$carmes);
chomp($price);
say "$name:$price万" if $price<15 and $price>10;
}
close CAR;
程序运行结果如下(……表示以下有若干行省略没列出):
伊兰特 悦动1.6GL自动舒适型2010款:10.88万
伊兰特 悦动1.6GLS自动舒适型2010款:10.98万
伊兰特 悦动1.6GLS自动豪华型2010款:11.98万
伊兰特 悦动1.8GLS手动豪华型2010款:12.18万
伊兰特 悦动1.8GLS自动豪华型2010款:12.98万
……
……
分享到:
相关推荐
6. perl-IO-Compress-2.061-2.el7.noarch.rpm - 这个包提供了Perl的输入输出(IO)接口来压缩和解压缩数据。 7. perl-libwww-perl-6.05-2.el7.noarch.rpm - 这是一个Perl模块,用于处理HTTP请求和响应,常用于编写...
4. **输入/输出** - 使用`open`函数打开文件,然后通过`或`>`操作符读写文件。 - `<>`运算符可以逐行读取文件,例如`while () { ... }`。 5. **正则表达式** - Perl是正则表达式的强大工具,可以使用`=~`操作符...
这些模块分别涉及网络通信、输入输出压缩、XML处理、网络请求、HTML解析、安全套接字通信等广泛的功能。 安装这一系列软件包的步骤分为两步: 1. 解压.tar.gz压缩包,这可以通过tar命令完成,具体命令为: tar -...
2. **Perl处理输入输出**:这部分深入讲解了如何使用Perl进行文件操作,包括打开、读取、写入和关闭文件,以及处理标准输入输出和重定向。还涵盖了处理命令行参数和环境变量的方法,使读者能够编写更实用的脚本。 3...
这些模块分别提供了网络通信、输入输出数据压缩、HTML和XML解析以及网络请求等功能。这些模块的安装将极大增强Perl在处理网络和数据处理方面的能力。 通过本压缩包的安装,用户可以为Linux系统中的Perl环境添加XML ...
2. **环境变量**:安装完成后,Strawberry Perl会自动将Perl的bin目录添加到系统的PATH环境变量中,这样你就可以在命令行中直接运行Perl命令了。 3. **验证安装**:打开命令提示符,输入`perl -v`,如果显示出Perl的...
而Capture::Tiny是一个Perl模块,旨在提供简单的方式来捕获代码执行过程中的输出、标准错误以及标准输入,从而可以在编程时对这些数据进行进一步的分析或处理。 首先,让我们看一下这个压缩包的内容。根据提供的...
-n选项使得Perl在处理输入文件的每一行时会执行指定的代码块,但不会自动打印每行。该选项通常和后面的代码块配合使用,例如: ```perl $ ls -lAF | perl -nle 'print if -f $_' ``` 上面的命令会输出当前目录下所有...
这些依赖包都是Perl语言编写的模块,它们分别对应处理Web内容、日期处理、多媒体类型识别、统一资源标识符处理、HTTP消息处理、国际标准书号处理、日期和时间处理、HTML输入输出处理以及媒体类型和文件关联关系管理...
- perl-IO-Compress-2.061-2.el7.noarch.rpm:这是一个Perl模块,提供了对压缩文件的输入输出操作。 - perl-Compress-Raw-Zlib-2.061-4.el7.x86_64.rpm:这是一个Perl模块,为Perl提供Zlib压缩库的接口,Zlib是广泛...
在Perl中,与文件和输入/输出流打交道非常简单。文档会介绍打开、关闭文件、读写操作,以及文件处理函数如fopen、fclose、feof等。 7. **模块和CPAN** Perl拥有一个庞大的标准库和第三方模块库CPAN...
Perl是一种强大的脚本编程语言,尤其在文本处理和系统管理任务中广泛应用。在Perl中,`printf`函数家族是用于格式化输出的...如果你正在处理涉及用户输入和`printf`函数的Perl代码,这份文档将是一份宝贵的参考资料。
以上内容总结了《Perl语言入门(第四版)》中的核心知识点,包括Perl的基础概念、基本语法、数据类型、流程控制、子程序定义以及输入输出等内容。这些知识点对于初学者来说是非常重要的,能够帮助他们快速掌握Perl的...
4. **文件和I/O操作**:学习如何读写文件,处理输入/输出流,以及使用各种文件测试操作符检查文件状态。 5. **模块和CPAN**:Perl的模块系统允许开发者复用代码,提高效率。CPAN(Comprehensive Perl Archive ...
4. **模块分析**:识别和提取模块定义,包括模块名、输入输出信号、内部信号等。 5. **实例化处理**:查找并解析模块实例,理解它们之间的连接关系。 6. **属性提取**:提取模块或信号的属性,如参数、约束等。 7. *...
Perl提供了丰富的文件和输入/输出(I/O)函数,可以方便地读写文件、处理标准输入输出。例如,下面的代码会读取并打印一个文件的内容: ```perl open(my $fh, ', 'filename.txt') or die "Cannot open file: $!"; ...
3. 安装完成后,可以通过命令行输入 `perl -v` 验证安装。 ##### 对于 Unix/Linux 用户: 1. 访问 [Perl 官方网站](http://www.perl.com/pub/language/info/software.html#stable) 获取最新版本。 2. 使用以下命令...
4. **输入/输出**:标准输入、输出和错误处理,以及重定向和管道操作。 5. **模块的使用**:介绍如何安装和使用CPAN上的模块,以及编写自己的模块。 6. **面向对象编程**:讲解如何创建和使用Perl的类和对象。 7. **...
这些知识点覆盖了Perl的基础概念、数据类型、控制结构以及更高级的主题,如子程序、输入输出操作和哈希表的使用。通过学习这些内容,初学者可以建立起对Perl编程语言的基本理解,并为进一步深入学习打下坚实的基础。