句柄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. JIRA中的标记语言的语法参考

    前言 看到网上有的文章说JIRA是使用Textile这门标记语言,有些语法和Wikitext和Markdown相像.JIRA在2017年进行了一次大更新,某些语法可能和以前不大一样,这里纪录一下常用的 ...

  2. MarkdownPad - win10环境下无法渲染HTML问题

    问题 在win10平台安装了MarkdownPad 2之后,发现在渲染md文件时报错,在预览页面无法正常渲染HTML: 安装报错提示前往官网,可以看到如下的解决方法: LivePreview is n ...

  3. NET4.5中的Task.Run及Task.Delay方法

  4. [BZOJ5219]最长路径

    Description 在Byteland一共有n个城市,编号依次为1到n,它们之间计划修建n(n-1)/2条单向道路,对于任意两个不同的点i和 j,在它们之间有且仅有一条单向道路,方向要么是i到j, ...

  5. linux系统任务调度命令crontab

    循环重复的执行计划任务.有计划性的执行任务,像这种任务,在linux系统中就有cron命令来完成. linux系统下的任务调度分为两类:系统任务调度和用户任务调度. /etc/crontab文件就是系 ...

  6. python_15(jquery)

    第1章 iquery 1.1 官网 1.2 流程图 1.3 Javascripts方法 1.4 书写格式 1.5 jQuery 的两大特 1.6 对比javascript代码量 第2章 入口函数(重要 ...

  7. Autofac框架使用遇到的问题

    1) 安全透明方法“Autofac.Integration.Mvc.RegistrationExtensions.RegisterControllers(Autofac.ContainerBuilde ...

  8. 【转】常用邮箱的 IMAP/POP3/SMTP 设置

    POP3 POP3是Post Office Protocol 3的简称,即邮局协议的第3个版本,它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议.它是因特网电子邮件的第 ...

  9. Scrapy框架的基本组成及功能使用

    1.什么是scrapy? Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架.框架的本质就是集成各种功能.具有很强通用性的项目模板. 2.安装 Linux:       pip3 in ...

  10. hihocoder1766 字符串问题

    思路: 不断贪心增加即可. 实现: #include <iostream> #include <cstring> using namespace std; ][]; int m ...