perl学习之文件句柄filehandle

句柄handle 分为文件句柄和目录句柄,文件句柄实际上包含文件,进程和套接字的读写。

文件句柄的操作步骤

open(FD,"filename");

@lines=<FD>;

close(FD);

open()由以下几个用法

open(FD,"> filename") 写数据进文件

open(FD,">> filename") 追加数据进文件

open(FD,"filename") 读文件

open(FD,"process |") 读进程结果

open(FD,"| to process") 往进程中写数据,不过对WINDOWS系统写会有问题

$line=<FD> 获取起始行

如果要遍历整个文件

while (defined $line=<FD>) {}

@lines=<FD> 将整个文件放入lines数组中

可以使用FileHandle包,可以避免变量覆盖的现象。

use FileHandle;

$fileHandleName= new FileHandle("filename");

$line=<$fileHandleName>;

close() 关闭文件句柄

实际上,perl会在句柄超出范围或程序结束时,自动关闭。

写入操作

print (@arrayName) 或 print FILEHANDLENAME (@arrayName)

也可以用以下方式来写入

foreach $line(@arrayName)

{

print FILEHANDLENAME "$line\n";

}

使用$line的好处是,程序在运行时,会将$line的值立即放入文件中。而使用@arrayname的方式会先放入缓存中累积,如果出现进程中断,会倒是输出数据丢失。如果要避免这个问题出现可以把$|设置为1

对二进制文件的读写

使用binmode FILEHANDLE

具体实例

open(IN_FD,"test.gif");

open(OUT_FD," > copy.gif");

binmode(IN_FD);

binmode(OUT_FD);

while(read(IN_FD,$buffer,1024){

print OUT_FD,$buffer;

}

close(IN_FD);

close(OUT_FD);

select(FILEHANDLE) 用于设定输出的默认句柄

在select指定句柄后,随后输出在默认情况下,会输出到指定的句柄

open(FD,"> newfile");

select(FD);

print "test"; #将test添加到newfile中

select(STDOUT);

print "ok";  #将ok输出到屏幕

flock()文件加锁,只适用unix,其他系统或网络文件可能无效

1 创建共享锁  2 创建排他锁  4 创建非阻塞锁 8 排除当前锁

open(FD,">> inputfile");

flock(FD,2);

print FD "test string";

flock(FD,8);

close(FD);

seek()使用,可以让文件指针指向到指定位置

seek(FILEHANDLE,BYTEOFFSET,FILEPOSITION)

BYTEOFFSET 用于位移值,可以是正负值

FILEPOSITION 位置值,0表示到文件开头,1文件中的当前位置,2文件末尾位置

tell()返回文件中当前字节的位置

打开文件进行读写的操作

open(FD,"+<filename") 先读后写

open(FD,"+>filename") 先写后读

open(FD,"+>>filename") 先追加后读

时间: 2024-07-29 06:15:19

perl学习之文件句柄filehandle的相关文章

perl学习之:read

perl read()函数例子,read()函数实例代码 - 读取,或试图读取,长度LENGTH 与文件句柄FILEHANDLE 相关联的文件到缓冲区BUFFER中的字节数. 语法 read FILEHANDLE, SCALAR, LENGTH, OFFSET read FILEHANDLE, SCALAR, LENGTH 定义和用法 读取,或试图读取,长度LENGTH 与文件句柄FILEHANDLE 相关联的文件到缓冲区BUFFER中的字节数.如果指定了一个偏移量,所读出的字节被放置到缓冲区中

Perl学习笔记(一)--简介

1. 查看当前所用Perl版本号 ? 1 perl –v 2.  一个简单的Perl程序 ? 1 2 3 print "hello world"; #这是注释 执行它: ? 1 Perl helloWorld.txt 文件名后缀可以是pl可以是txt 3. 一个稍微复杂点的Perl程序 ? 1 2 3 4 5 6 @line = `perldoc -u -f atan2`; //运行一个外部命令,通过反引号来调用,将输出结果一行行依次存储在@line这个数组变量中 foreach(@l

perl学习笔记--搭建开发环境

windows下perl开发环境搭建 perl下载地址:http://www.activestate.com/developer-tools 各个插件的安装方法:(通过代理上网的方法) 方法一:padwalker的安装步骤 1. padwalker下载地址: http://www.bribes.org/perl/ppm/ 2. 解压下载的文件 4. 拷贝 blib/lib/PadWalker.pm 到 Perl/lib(你的安装路径)5. 拷贝 blib/arch/auto/PadWalker

PERL学习笔记---正则表达式的应用

使用m//匹配 //这是m//(模式匹配)的一种简写.同qw//操作一样,可以使用任何成对的分隔符.因此,可以使用m(fred), m<fred>, m{fred}, m[fred],或者m,fred,, m!fred!, m^fred^,其它非成对的分隔符也可以 不区分大小写:/i if(/yes/i) {#大小写无关 print “In that case, I recommend that you go bowling.\n”;} 匹配任何字符:/s 默认情况下,点(.)不匹配换行符,这

Perl学习笔记(五)--输入与输出

文件句柄 文件句柄(filehandle)就是程序里代表perl进程与外界之间的I/O联系的名称.不是文件的名称. 打开文件句柄 Perl提供的默认文件句柄:STDIN.STDOUT.STDERR open CONFIG, ‘dino’; #打开CONFIG文件句柄,让它指向dino open CONFIG, ‘<dino’; #同上,只读打开 open BEDROCK, ‘>fred’; #打开文件句柄BEDROCK并输出到新文件fred open LOG, ‘>>logfile

perl学习 之:my local our

范围声明 和全局声明类似,词法范围声明也是在编译时起作用的.和全局声明不同的是,词法范围声明的作用范围是从声明开始到闭合范围的最里层(块,文件,或者 eval--以先到者为准).这也是为什么我们称它为词法范围,尽管"文本范围"可能更准确些,因为词法范围这个词实在和词法没什么关系.但是全世界的计算机科学家都知道"词法范围"是什么意思,所以在这里我们还是用这个词. Perl 还支持动态范围声明.动态范围同样也伸展到最里层的闭合块,但是这里的"闭合"是

Perl 学习笔记-文件测试

1.文件测试操作符 针对文件和目录的测试操作符: -r/-w/-x/-o: 文件或目录, 对有效的(负责运行这个程序的)用户或组来说是可读/写/执行/拥有 的; 这些测试位会查看文件的权限位, 以此判断哪些操作是允许的, 如果系统使用访问控制列表(ACL), 那么测试就按列表进行判断, 但是只是测试结果只是操作系统的看法, 但是受实际情况限制, 运行的事未必可行, 如空文件运行运行, 但是并没有什么意义. -R/-W/-X/-O: 文件或目录, 对实际的用户或组来说是可读/写/执行/拥有 的;

perl学习之内置变量

Perl内置特殊变量 一.正则表达式特殊变量:1.$n  :包含上次模式匹配的第n个子串2.$& :前一次成功模式匹配的字符串3.$`  :前次匹配成功的子串之前的内容4.$’ :前次匹配成功的子串之后的内容5.$+ :前一次使用括号的模式匹配的字符串. 二.文件句柄特殊变量:1.$| :如果设置为零,在每次调用函数write或print后,自动调用函数fflush,将所写内容写回文件2.$% :当前输出页号3.$= :当前每页长度4.$- :当前页剩余的行数5.$~ :当前报表输出格式的名称.

继续Perl学习 递归

有一段时间学习PYTHON,很伤心啊,版本太新,好多东西用起来不方便. 还是继续用我的小***perl吧,我相信perl会解决掉我遇到的大部分问题! 一.统计随机数出现频次 --源代码 --- 结果显示 二.递归应用,阶乘算法 --代码 -- 结果