Chinaunix首页 | 论坛 | 博客
  • 博客访问: 15631
  • 博文数量: 7
  • 博客积分: 390
  • 博客等级: 一等列兵
  • 技术积分: 95
  • 用 户 组: 普通用户
  • 注册时间: 2009-07-07 00:31
文章分类

全部博文(7)

文章存档

2009年(7)

我的朋友

分类:

2009-07-08 21:36:36

行输入操作,标量context 中它将返回输入的下一行。
chomp($line=);  #读入下一行并去掉结尾换行符
返回文本中的一行,文件末尾返回undef.要分辨其是undef 还是空串,可以使用defined 函数,它将在为undef 时返回false,其余返回true。

while(){ #等效于while(defined($_=))
    print "I saw $_";
}
# 不能将chomp 操作插入条件表达式
# 存入了$_变量

foeach(){
....
}
区别:while读入一行进入循环再回到开头读入下一行。
     foeach读入一个列表即在循环前读入所有行。

Perl调用参数:
$ ./my_program fred barney betty
# 运行当前目录下的my_program,它将处理文件fred,文件barney,最后是betty。
如果没有命令行参数,程序将处理标准输入流。作为一个特例,如果将连接号(-)作为一个参数,其含义也是标准输入。如果调用参数为fred – betty,其含义是程序将首先处理文件fred,其次是标准输入流,最后是文件betty。

<>操作符一种特殊的行输入操作:
while(defined($line=<>)){
    chmop($line);
    print "It was $line that I saw!\n";
}
运行次程序,给参数fred barney betty, 会依次读入文件并打印每一行(当前文件名字保存在Perl特殊标量$ARGV中,参数列表存在@ARGV数组里),读完后转入下一个文件参数,从一个文件到另一个文件之间没有空行,当使用<>时,就像输入的是一个大文件一样。如果输入结束时,<>将返回undef(同时退出while 循环)。(defined check undef will return false,and then while will be out...)
更简单的实现方式:
while(<>){
    chomp; #chomp $_;
    print "It was $_ that I saw!\n";
}

Perl Power Tools(PPT)项目 - 用Perl去实现几乎所有标准Unix工具

print的两个规则:
1.括号规则:如果括号有无不能改变语句的意义,则其是可选的。例如:
print ("Hello world!\n");
print "Hello world!\n";
2.函数调用规则:“看上去像函数调用”。
所谓看上去像函数调用的特点是:函数名后紧跟括号,括号中为参数。
如:print(2+3); 其就是函数调用,尽管是print...输出为5,然后返回一个值(true or false)
$result = print(“hello world\n”);  #result的值为1
print (2+3)*4;  #输出5,然后返回1表示print成功,然后1*4=4,此返回值没有保存在变量中被丢弃
(print (2+3)) * 4; #同上但更容易理解

printf:
格式符:%字母, 格式符和代表的元素一一对应.
printf "hello,%s; your password expires in %d days!\n", $user,$days_to_die;
%g-数字
%d-十进制整数, %x-十六进制, %o-八进制
printf "in %d days!\n", 17.85 #in 17 days!
数据宽度值 print"%6f\n",42 #print oooo42 (o is 空格)
%s-字符串
宽度值为负数意为左对齐(即空格补在后面)
%f可设置小数点后面几位数字:printf "%12.3f\n",6*7+2/3  #print oooooo42.667
输出百分号,%%

任意个format对应任意个元素的格式化打印
my @items =qw /li deng wu/;
my $format="The items are:\n".("%10s\n"x @items);  在标量context中返回元素个数,x操作符用来重复format的次数。
printf $format, @items; 在列表context中返回列表元素

句柄
Perl自带6个文件句柄 STDIN, STDOUT, STDERR, DATA, ARGV, ARGVOUT (句柄名建议大写)

程序从STDIN读入,结果写到STDOUT,错误写到STDERR

open句柄
open CONFIG, "li";  #打开CONFIG句柄,它指向li文件
open CONFIG, "open BEDROCK, ">deng"; #打开BEDROCK句柄,数据写入deng文件
open LOG,">>logfile"; #数据追加到logfile
Perl 5.6的open 有3参数形式,如:open CONFIG,"<","li";

die的使用 类似于抛出异常
if(!open LOG,">>logfile"){
    die "Cannnot create the logfile:$!";
}
# $!将表明错误,以及程序的名字和错误出现在多少行,用于debug。
# 如果不需要打印程序名于行数 则直接die "Cannnot create the logfile\n"; 消息后加换行符

阅读(707) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~