ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 5,输入与输出(perl语言笔记)

5,输入与输出(perl语言笔记)

原创 Linux操作系统 作者:tonykorn97 时间:2007-06-21 00:00:00 0 删除 编辑
1,读取标准输入
while (defined($line = )) {
print "I saw $line";
}
简写
while () {
print "I saw $_";
}

2, 从钻石操作符输入
钻石操作符:<>
它能让程序在处理调用参数时,提供类似于标准unix工具程序的用法。若时不提供任何调用参数,程序应该改成出来标准输入流。但有个特

例;如果某个参数是连字符(-),那耶代表标准输入。
钻石操作符是整行输入操作符的特例,例如:
while (defined($line = <>) {
chomp ($line);
print "It was $line that I saw! ";
}
既然是整行输入操作符的一种特例,因此可以使用先前我们所看到的简写,将输入读取到默认的$_里:
while (<>) {
chomp;
print "It was $_ that I saw; ";
}

3, 调用参数
严格来说,钻石操作符并不好真的去检查调用参数,它靠的是@ARGV数组。这个数组是由perl解释器事先建立的特殊数组,其内容就是调用

参数所组成的列表。
钻石操作符如何绝对使用那些文件名?方法如下:它会查找@ARGV,如果它找到的是空列表,就会改用标准输入流;否则,就会使用@ARGV里

的文件列表。这表示程序开始运行之后,只要尚未使用钻石操作符,就都可以对@ARGV动点手脚。举例来说,我们可以不管用户在命令行指定了

什么,而是一律出来3个特定的文件:
@ARGV = qw / larry moe curly /;
while (<>) {
chomp;
print "It was $_ that I saw in som stooge-like file! ";
}

4, 输出至标准输出

5, printf格式化输出结果
printf操作符的参数包括“格式字符串”以及“所要输的数据列表”,格式字符串是填空用的模板,代表你想要输出的格式:
printf "Hello , %s; your password expires in %d days! ", $user,$days_to_die;
格式字符串里可以有多个所谓的“转换”(conversion).每种转换都会以百分符号(%)开头,然后以某个字母结尾。
printf可用的转换格式很多,所以我们在这里会说明最常用的部分。
%g:要输出恰当的数值形式,可以使用%g,它会依需自动选择浮点数,整数甚至是指数形式。
%d:代表十进制的整数,它会舍去小数点之后的整数。
%s:代表字符串,所以它相当于将所提供的值当成字符串进行替换,但是可以设置字段宽度;如果宽度是负值,则向左对齐。
%f:会依需要四舍五入,甚至还可以指定小数点之后的输出位数。

6,文件句柄
6个各具特殊用途的文件句柄名称:STDIN,STDOUT,STDERR,DATA,ARGV和ARGVOUT

7,打开文件句柄
perl所提供的3种文件句柄STDIN,STDOUT和STDERR,都是由perl进程的父进程自动打开的文件或设备。当你需要其它的文件句柄时,请使用

open操作符告诉perl,要求操作系统为你的程序和外界开启一道桥梁。例如:

open CONFIG, "dino";
open CONFIG, " open BEDROCK, ">fred";
open LOG, ">>logfile";
第一个例子会打开名为CONFIG的文件句柄,让它联系到文件dino。换句话说,它会打击文件dino.
第二个例子和第一个所作的事情完全相同,但是第二个例子的小于符合明示了“这个文件是用来输入数据的”,虽然那已经是默认的行为。
第三个例子会打开文件句柄BEDROCK并输出到新文件fred。
第四个例子使用两个大于号指明以添加的方式打开文件。

open另一种3个参数的写法
open CONFIG, "<", "dino";
open BEDROCK, ">", $file_name;
open LOG, ">>", &logfile_name();
其优点在于语法上可以很清楚的界定文件的模式字符串(第二个参数)与文件名本身(第三个参数)。

8,不良的文件句柄
my $success = open LOG, ">>logfile"; #获取返回值
unless ($success){
#open失败了
...
}

9,关闭文件句柄
close BEDROCK;
当重新打开某个文件句柄时,perl会自动关闭原先的文件句柄。在程序结束时,perl也会自动关闭文件句柄。

10, 用die来处理严重错误
die函数会输出你所指定的信息,并且让你的程序在非零的结束状态下立刻终止。
if (! open LOG, ">>logfile") {
die "Cannot create logfile:$!";
}
如果open失败,die会终止程序的运行,并且告诉我们“无法创建日志文件”。里面的$!代表着给人看的系统抱怨信息。

11,用warn送出警告信息
die的功能是产生像perl的内置错误这样的严重错误。相同的,warn函数的功能就是产生类似于perl的内置警告信息的信息。

12,使用文件句柄
当文件句柄以读取模式打开后,你可以轻易地从它读取一行数据,就像从STDIN读取标准输入流一样。因此,以“从unix系统读取密码文件

”为例:
open PASSWD, "/etc/passwd"
or die "How did you get logged in?($!)";
while () {
chomp;
...
}
在这个例子里,die的信息中用了一对括号围住$!.它们只不过十括住输出信息的括号而已(有时候标点符号及时标点符号)。所谓的“整

行输入操作符”是由两部分组成的:一对角括号(真正的整行输入操作符)以及里面用来输入的文件句柄。

13,改变默认的文件句柄
原则上,假如不为print提供文件句柄,它的输出就会送到STDOUT.不过,你可以使用select操作符来改变默认的文件句柄。在下面这个范

例里,我们会将输出送到BEDROCK这个文件句柄;
select BEDROCK;
print "I hope Mr. Slate doesn't find out about this. ";
print "Wilma! ";

14, 重新打开标准文件句柄
#送出错误信息doa我自己的错误信息日志中
open STDERR, ">>/home/barney/.error_log"
or die "Can't open error log for append:$!";
重新打开STDERR之后,任何从perl产生的错误信息都会送到新的文件里。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/312079/viewspace-245691/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2007-12-05

  • 博文量
    1854
  • 访问量
    2089011