句柄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") 先追加后读

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

  1. perl学习之:read

    perl read()函数例子,read()函数实例代码 - 读取,或试图读取,长度LENGTH 与文件句柄FILEHANDLE 相关联的文件到缓冲区BUFFER中的字节数. 语法 read FILE ...

  2. perl 学习笔记

    一:基础 1:安装perl      centos: yum -y install perl       官网:https://www.perl.org/      升级到5.22:先下载,执行./i ...

  3. perl学习(5) 输入和输出

    1.1. 从标准输入设备输入 <STDIN> 行输入操作在到达文件的结尾时将返回undef,在while循环的条件中不能使用chomp: while (defined($line = &l ...

  4. perl学习之路1

    一切要从Hollo world开始 公司要用perl....啊, 不会只能自学了, 毕竟是公司啊, 不是学校...公司不学习就滚蛋了...惨惨惨 因为是学习嘛, 感觉开虚拟机比较麻烦所以直接用了个 瘟 ...

  5. Perl的DATA文件句柄

    有太多次写完一个perl程序,需要另外新建一个文件来测试,每次觉得很繁琐,但又不得不这么做.没想到原来perl已经提供了解决方案,这就是DATA. 使用很简单,见下面这个例子: #!/usr/bin/ ...

  6. Perl 学习笔记-目标操作

    1.在目录树中移动. 程序运行时会以当前工作目录作为相对路径的起点, 可以使用  chdir 操作符改变当前目录: chdir "/etc" or die "Can't ...

  7. Perl 学习笔记-文件测试

    1.文件测试操作符 针对文件和目录的测试操作符: -r/-w/-x/-o: 文件或目录, 对有效的(负责运行这个程序的)用户或组来说是可读/写/执行/拥有 的; 这些测试位会查看文件的权限位, 以此判 ...

  8. Perl 学习笔记-高级控制结构

    1.unless控制结构 类似于独立的else语句; 要么条件为真, 要么执行语句块内的代码;  unless(<condition>){code...;} 等价于  if(<con ...

  9. Perl 学习笔记-输入输出

    1.读取标准输入<STDIN>(行输入操作=> 读取一行直到换行符) chomp($line = <STDIN>); # 读取一行并去掉最后的换行符(不会自动去掉) pr ...

随机推荐

  1. SpringBoot | 遇坑总结 | JPA

    1. Caused by: org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when ...

  2. Tinghua Data Mining 7

    SVM B分割得更加无偏 比较公平 卡着分界面的点叫支持向量,就好比托着分界面 支持向量决定了可移动的范围,这个范围就叫margin 分界面可移动的距离 前提是先要被分对 对偶问题一般是不等价的,但是 ...

  3. Tinghua Data Mining 4

    贝叶斯 决策树 知道三文鱼和金枪鱼颜色 让你去猜 B命中的概率不能直接减去四分之三 因为有可能同时命中 A B 命中不是互斥事件 即便体检报告是阳性,真正得癌症的概率也很小,只有0.21 绝大多数的阳 ...

  4. monxin cms 任意文件删除漏洞

    \program\diypage\receive\edit.php首先看到一个unlink($path);本来应该先看sql语句的,但知道是任意文件删除先跳过删除语句,看看$path怎么传入的倒推上去 ...

  5. 洛谷 P1094 纪念品分组

    P1094 纪念品分组 先按价格对纪念品排序(这里是从大到小),然后从两端向中心开始配对,有两个变量i和j,表示正在处理的两个纪念品编号,开始时i=1,j=n,如果a[i]+a[j]>w则第i贵 ...

  6. python-函数进阶-动态传参,名称空间,作用域的问题

    一.函数的动态的动态参数 动态参数分为两种:动态接收位置参数.动态接收关键字参数. 1.*args  位置参数动态传参 # 顺序: 位置参数=>*args(arguments) => 默认 ...

  7. Spring-打印机案例

    1.导包 <!--beans--><dependency> <groupId>org.springframework</groupId> <art ...

  8. dubbo源码阅读之集群(故障处理策略)

    dubbo集群概述 dubbo集群功能的切入点在ReferenceConfig.createProxy方法以及Protocol.refer方法中. 在ReferenceConfig.createPro ...

  9. Windows定时任务管理以及服务管理

    1.NSSM.exe https://nssm.cc/ 2.Topshelf 引用地址:https://www.cnblogs.com/guogangj/p/10093102.html#4136330

  10. 增加和减少mongodb复制集中的节点

    MongoDB Replica Sets不仅提供高可用性的解决方案,同时也提供负载均衡的解决方案,增减 Replica Sets节点在实际应用中非常普通.例如,当应用的读压力暴增时,3台节点的环境已不 ...