大雀软件园

首页 软件下载 安卓市场 苹果市场 电脑游戏 安卓游戏 文章资讯 驱动下载
技术开发 网页设计 图形图象 数据库 网络媒体 网络安全 站长CLUB 操作系统 媒体动画 安卓相关
当前位置: 首页 -> 技术开发 -> CGI专区 -> Perl教学 第十一篇 文件系统之二

Perl教学 第十一篇 文件系统之二

时间: 2021-07-31 作者:daque

不妨看到,这两行并未按咱们设想的程序存贮,干什么呢?咱们来领会一下这段步调。第3行重定向规范输入文献,本领是翻开文献file1将它与文献变量stdout关系,这也封闭了规范输入文献。第4行重定向规范缺点文献,参数>&stdout报告perl证明器运用已翻开并与stdout关系的文献,即文献变量stderr指向与stdout沟通的文献。第5、6行辨别向stdout和stderr写入数据,由于这两个文献变量指向同一个文献,故两行字符串均写到文献file第11中学,但程序却是缺点的,如何回事呢? 题目在乎unix对输入的处置上。当运用print(或其它因变量)写入stdout等文献时,unix操纵体例真实所做的是把数据正片到一片特出的外存即缓冲区中,接下来的输入操纵连接写入缓冲区直属机关到写满,当缓冲区满了,就把十足数据本质输入。象如许先写入缓冲区再把所有缓冲区的实质输入比历次都本质输入所耗费的功夫要少得多,由于普遍来说,i/o比外存操纵慢得多。步调中断时,任何非空的缓冲区都被输入,但是,体例为stdout和stderr辨别保护一片缓冲区,而且先输入stderr的实质,所以存贮在stderr的缓冲区中的实质line 2出此刻存贮在stdout的缓冲区中的实质line 1之前。 为领会决这个题目,不妨报告perl证明器不对文献运用缓冲,本领为:1、用select因变量采用文献2、把值1赋给体例变量$|体例变量$|指定文献能否举行缓冲而尽管其能否该当运用缓冲。即使$|为非零值则不运用缓冲。$|与体例变量$~和$^共同处事,当未挪用select因变量时,$|感化暂时缺省文献。下例保护了输入的步骤:1 : #!/usr/local/bin/perl2 : 3 : open (stdout, ">file1") || die ("open stdout failed");4 : open (stderr, ">&stdout") || die ("open stderr failed");5 : $| = 1;6 : select (stderr);7 : $| = 1;8 : print stdout ("line 1\n");9 : print stderr ("line 2\n");10: close (stdout);11: close (stderr); 步调运转后,文献file第11中学实质为:line 1line 2第5即将$|赋成1,报告perl证明器暂时缺省文献不举行缓冲,由于未挪用select,暂时的缺省文献为重定向到文献file1的stdout。第6即将暂时缺省文献设为stderr,第7行又树立$|为1,关掉了重定向到file1的规范缺点文献的缓冲。因为stdout和stderr的缓冲均被关掉,向其的输入连忙被写到文献中,所以line 1出此刻第一条龙。4)指定读写权力翻开一个既可读又可写的文献本领是在文献名前加上"+>",如次:open (readwrite, "+>file1");此语句翻开既可读又可写的文献file1,即不妨重写个中的实质。文献读写操纵最佳与库因变量seek和tell一道运用,如许不妨跳到文献任何一点。注:也可用前缀"+<"指定可读写权力。5)close因变量用来封闭翻开的文献。当用close封闭弹道,即重定向的吩咐时,步调等候重定向的吩咐中断,如:open (mypipe, "cat file*|");close (mypipe);当封闭此文献变量时,步调休憩运转,直到吩咐cat file*运转结束。6)print, printf和write因变量print是这三个因变量中最大略的,它向指定的文献输入,即使未指定,则输入到暂时缺省文献中,如:print ("hello, there!\n");print outfile ("hello, there!\n");第一句输入到暂时缺省文献中,若未挪用select,则为stdout。第二句输入到由文献变量outfile指定的文献中。printf因变量先方法化字符串再输入到指定文献或暂时缺省文献中,如:printf outfile (“you owe me %8.2f", $owing);此语句掏出变量$owing的值并替代掉串中的%8.2f,%8.2f是域方法的例子,把$owing的值看作浮点数。write因变量运用输入方法把消息输入到文献中,如:select (outfile);$~ = "myformat";write;对于printf和write,详见《第x章 方法化输入》。7)select因变量select因变量将经过参数传播的文献变量指定于新的暂时缺省文献,如:select (myfile);如许,myfile就成了暂时缺省文献,当对print、write和printf的挪用未指定文献时,就输入到myfile中。8)eof因变量eof因变量察看结果一次读文献操纵能否为文献结果一个记载,即使是,则归来非零值,即使文献再有实质,归来零。普遍情景下,对eof的挪用不加括号,由于eof和eof()是等效的,但与<>操纵符一道运用时,eof和eof()就各别了。此刻咱们来创造两个文献,辨别叫作file1和file2。file1的实质为:this is a line from the first file.here is the last line of the first file.file2的实质为:this is a line from the second and last file.here is the last line of the last file.底下就来看一下eof和eof()的辨别,第一个步调为:1: #!/usr/local/bin/perl2: 3: while ($line = <>) {4: print ($line);5: if (eof) {6: print ("-- end of current file --\n");7: }8: }

热门阅览

最新排行

Copyright © 2019-2021 大雀软件园(www.daque.cn) All Rights Reserved.