perl 学习笔记完
第六章 I/O基础
从标准输入进行输入
while (defined($line = <STDIN>)) {
print "I saw $line";
};
因为行输入操作符在你到达文件末尾时会返回undef,所以可以用它方便地跳出循环。
从钻石操作符进行输入
“<>”
是一种特殊的行输入操作符,它可以是也可以不是来自键盘的输入。
while (defined($line = <>)) {
chomp($line);
print "It was $line that I saw!\n";
};
如果用a,b,c三个参数调用该程序,将打印三个文件的内容。使用钻石操作符,就好像输入文件被合并到一个大文件中。上面程序可用快捷方式写成:
while (<>) {
chomp;
print "It was $_ that I saw!\n";
};
大多数linux标准工具中,短横-代表标准输入流。
通常在一个程序中只用一个钻石操作符,当初学者在程序中放第二个钻石时,其实他们一般是想用$_。记住,钻石操作符读取输入,但输入本身是在$_中。
调用参数
钻石操作符并不是直接从字面上读取调用参数,它实际上读取@ARGV数组。它被perl解释器预设为调用参数的列表。在程序中可以对该数组进行赋值等操作。
@ARGV = qw# a b c #; 强制读取这三个文件
while (<>) {
chomp;
print "It was $_ that I saw!\n";
};
向标准输出进行输出
print @array; aabbcc
print "@array"; aa bb cc
print <>; cat 的源代码
print sort <>; sort 的源代码
用printf进行格式化输出,和c类似。
数组与printf
可动态形成格式字符串。
my @items = qw ( a b c );
my $format = "the items are:\n".("%10s\n" x @items); 在标量上下文中使用@items得到它的长度
printf $format,@items 在列表上下文中使用@items得到它的内容
上下文太重要了。要好好感受。
第七章正则表达式的概念
正则表达式(regular expression),在perl中经常被称为模式(pattern),是与一个给定字符串匹配或不匹配的模版。
不要把正则表达式和被称为glod的shell的文件名匹配模式混淆。比如*.pm匹配以.pm结尾的文件名。
使用简单的模式
要比较一个模式和$_的内容,只需把模式放在一对斜杠之间,如下:
$_ = "aabbkdkdk";
if ( /aabb/ ) {
print "it matched!\n";
};