perl文件操作总结(全面讲解perl的文件操作)

Perl语言的文件操作 本文介绍了Perl语言中常用的文件操作方法,包括打开、读取、写入和关闭文件的基本步骤。同时,我们也讨论了一些最佳实践和高级技巧,以帮助程序员更高效地处理文件。通过示例,展示了如何处理实际的日志文件。掌握这些技能将为数据处理和系统管理等工作打下坚实的基础。无论是在数据分析、日志监控还是脚本自动化中,Perl都能通过优雅的文件操作帮助你更好地实现目标。希望本文能为你提供参考,提升你在Perl编程中的文件处理能力。 阅读详情

perl 文件操作,包括打开、关闭文件,读取、定入文件等。

原文链接:http://www.jbxue.com/article/3153.html

打开、关闭文件
open (filevar, filename)
filevar为文件句柄,或者说是程序中用来代表某文件的代号
filename为文件名,其路径可为相对路径,亦可为绝对路径

open(FILE1,"file1");
open(FILE1, "/u/jqpublic/file1");

打开文件时必须决定访问模式

open(FILE1,"file1");
read
open(outfile,">outfile");

write写模式将原文件覆盖,原有内容丢失

open(appendfile, ">>appendfile");
append

open的返回值用来确定打开文件的操作是否成功,成功时返回非零值,失败时返回零:

if (! open(MYFILE, "myfile")) {
die ("cannot open input file file1\n");
}
open (MYFILE, "file1") || die ("Could not open file");

close (MYFILE);

例子.读文件并显示

#!/usr/bin/perl

&gotest("/home/macg/perltest/gogo");
&gotest("/home/macg/www/index.html");
&gotest("jk");

sub gotest{
my(@tmp)=@_;
open (MYFILE, $tmp[0]) || die ("Could not open file");
@array = <MYFILE>; 此句不是读一行,而是读整个文件
foreach (@array) {
print $_;
}
close(MYFILE);
}
[macg@localhost perltest]$ ./tip.pl

kkkkk 第一个文件gogo读出

第二个文件index.html读出
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

<frameset rows=20%,*>
  <frame src="title.html" frameborder="no" scrolling="no">
  <frameset cols=30%,*>
    <frame src="index-left.htm" frameborder="no" name="left">
    <frame src="main-right.html" frameborder="no" name="right">
  </frameset>
</frameset>

第三个文件jk不存在,程序走die语句
Could not open file at ./tip.pl line 9

打开管道文件--------操作非常简单,就是以带管道符号的命令作为文件名字符串
执行一个管道命令
假设管道命令创建一个临时文件
再OPEN这个临时文件到句柄

[macg@localhost perltest]$ vi tip.pl
#!/usr/bin/perl

&gotest("ls -l |");

sub gotest{
my(@tmp)=@_;
open (MYFILE, $tmp[0]) || die ("Could not open file");
@array = <MYFILE>;
foreach (@array) {
print $_;
}
close(MYFILE);
} 
[macg@localhost perltest]$ ./tip.pl
total 16
-rw-rw-r-- 1 macg macg 6 Mar 16 13:06 gogo
-rwxrwxr-x 1 macg macg 192 Mar 17 16:53 tip.pl

读文件

$line = <MYFILE>;
读一行
并把文件指针向后移动一行
@array = <MYFILE>;
读全部
文件的每一行(含回车符)为@array的一个字符串元素
最简单的显示文件
@array = <MYFILE>; 一次读整个文件,读入一个字符串数组

foreach (@array) { 再打印字符串数组的每一个元素(每一行)
print $_;
}

[macg@localhost perltest]$ ./tip.pl
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

<frameset rows=20%,*>
  <frame src="title.html" frameborder="no" scrolling="no">
  <frameset cols=30%,*>
  </frameset>
</frameset>
my($line);
while ($line=<MYFILE>) {循环读一行,读不出就为NULL(0)
print $line; 
}

$line =<STDIN> ; 从键盘读一行,类似C的gets();

chomp 函数,截去变量尾端的\n换行,常与键盘输入合用,方法有二種:

1)$yourans=<STDIN>;
chomp $yourans;

2)chomp ($yourans=<STDIN>);

注意:一定不要用while (chomp($line=<MYFILE>)),因为chomp总是返回0值,和while($line=<MYFILE>)是不同的
while($line=<MYFILE>){
chomp($line); 把 chomp放在循环里边
…
} 

<> 和 <STDIN> 的区别
先说相同点:都支持标准输入读取
不同点:<> 可以将输入定向到命令行参数
vi readfile.pl

#! /usr/bin/perl
while (<>) {
print;
} 

./readfile.pl index.html 就是读取第一个命令行参数所指的文件
./readfile.pl 如果不带任何参数执行,就是由标准输入STDIN读取

有关perl 文件操作总结的内容,读到这里,是不是有种越种越清晰的感觉了呢?!
Let's go!

写文件 print/printf 句柄 (字串);
open(OUTFILE, ">outfile");
print OUTFILE ("Here is an output line.\n");
print STDERR ("File file1 exists.\n");
print STDOUT ("File file1 exists.\n");

最简单的文件COPY

#!/usr/bin/perl
&gotest("ls -l |","test");

sub gotest{
my(@tmp)=@_;
open (READFILE, $tmp[0]) || die ("Could not open file");
open (WRITEFILE, ">".$tmp[1]) || die ("Could not open file");
my($line);
while ($line=<READFILE>) {
print WRITEFILE $line; 
}
close(READFILE);
close(WRITEFILE);
} 

[macg@localhost perltest]$ ./tip.pl
[macg@localhost perltest]$ ls
gogo test tip.pl
[macg@localhost perltest]$ cat test
-rw-rw-r-- 1 macg macg 6 Mar 16 13:06 gogo
-rwxrwxr-x 1 macg macg 297 Mar 17 17:43 tip.pl 
上例同时也是一次管道文件的建立,相当于ls –l >test

-e 文件是否存在 -d 目录是否存在

#!/usr/bin/perl

chomp($file=<>);
&gotest($file);

sub gotest{
my(@tmp)=@_;
if (-e $tmp[0]) {
print "file is exist\n";
} else { print "file not found\n"; }
}

[macg@localhost perltest]$ ./tip.pl
gogo
file is exist
[macg@localhost perltest]$ ./tip.pl
kd
file not found

#!/usr/bin/perl

chomp($file=<>);
&gotest($file);

sub gotest{
my(@tmp)=@_;
if (-d $tmp[0]) {
print "directory is exist\n";
} else { print "directory not found\n"; }
}

[macg@localhost perltest]$ ls -F
gogo test testdir/ tip.pl*

[macg@localhost perltest]$ ./tip.pl
kj
directory not found
[macg@localhost perltest]$ ./tip.pl
testdir
directory is exist

if (!-e $file) 如果文件不存在
-r,-w,-x 权限
if (-w $file) {
print "$file 写权限!\n";
}

if (-x $file) {
print "$file 读权限!\n";
}

-z是否为空文件,-s是否非空
if (-z $tmp[0]) {
print "file is empty\n";
}
if ($len= -s $tmp[0]) { -s不仅能判断文件非空,还兼有计算文件大小的工作
print "file length is $len \n";
}
[macg@localhost perltest]$ touch pp
[macg@localhost perltest]$ ./tip.pl
pp
file is empty

[macg@localhost perltest]$ ./tip.pl
gogo
file length is 6

-l 是否为符号链接
-T 是否为文本文件

基本文件操作
删文件

#!/usr/bin/perl

chomp($file=<>);
&gotest($file);

sub gotest{
my(@tmp)=@_;
my($len);
unlink $tmp[0] if -e $tmp[0];
}

[macg@localhost perltest]$ ls
go test testdir tip.pl

[macg@localhost perltest]$ ./tip.pl
go

[macg@localhost perltest]$ ls
test testdir tip.pl
[macg@localhost perltest]$ ls
dd test testdir tip.pl

[macg@localhost perltest]$ ./tip.pl
/home/macg/perltest/dd 全路径删除

[macg@localhost perltest]$ ls
test testdir tip.pl

rename("原文件名", "新名");

#!/usr/bin/perl
&gotest("gogo","dd");

sub gotest{
my(@tmp)=@_;
rename($tmp[0],$tmp[1]);
}

[macg@localhost perltest]$ ls
gogo pp test testdir tip.pl

[macg@localhost perltest]$ ./tip.pl

[macg@localhost perltest]$ ls
dd pp test testdir tip.pl

取文件属性,共13个属性

#!/usr/bin/perl

chomp($file=<>);
&gotest($file);

sub gotest{
my(@tmp)=@_;
my(@sta)=stat($tmp[0]);
my($j);
for($j=0;$j<13;$j++) {
print "no.$j is $sta[$j] \n";
}
}

[macg@localhost perltest]$ ls
test testdir tip.pl
[macg@localhost perltest]$ ./tip.pl
test
no.0 is 770
no.1 is 809748
no.2 is 33204
no.3 is 1
no.4 is 500 uid
no.5 is 500
no.6 is 0
no.7 is 103 length文件大小
no.8 is 1174127246
no.9 is 1174124625
no.10 is 1174124625
no.11 is 4096
no.12 is 16 

文件copy命令 必须先use模块File

#!/usr/bin/perl

chomp($file=<>);
chomp($file2=<>);
&gotest($file,$file2);

sub gotest{
my(@tmp)=@_;
use File::Copy; 在perl主目录下查找File/Copy.pm

copy($tmp[0], $tmp[1]);
} 

[macg@localhost perltest]$ ./tip.pl
test
newtest
[macg@localhost perltest]$ ls
newtest test testdir tip.pl

[root@localhost perltest]# ls -F /usr/lib/perl5/5.8.6/File
Basename.pm CheckTree.pm Compare.pm Copy.pm DosGlob.pm Find.pm Path.pm Spec/ Spec.pm stat.pm Temp.pm

目录操作

chdir("testdir") || die "$!";
mkdir($dir, 0755) || die "$!";
rmdir("testdir") || die "$!";

#!/usr/bin/perl

chomp($directory=<>);
chomp($choice=<>);
&gotest($directory,$choice);

sub gotest{
my(@tmp)=@_;

if($tmp[1]) {
mkdir($tmp[0], 0755) || die "$!";
} else {
rmdir($tmp[0]) || die "$!";
}
}

[macg@localhost perltest]$ ./tip.pl
newdir
1
[macg@localhost perltest]$ ls -F
newdir/ newtest test testdir/ tip.pl* 
[macg@localhost perltest]$ ./tip.pl
testdir
0
Directory not empty at ./tip.pl line 13, <> line 2
rmdir的die信息

改变文件属性和所属 (需在root下才能起作用。换句话说,这是必须在ROOT下执行的PERL语句)
chmod(0755, "file1.txt", "file2.txt"); 
$uid=500;
$gid=500;
chown($uid, $gid, "file1.txt", "file2.txt");

本文原始链接:http://www.jbxue.com/article/3153.html

Perl编程实践:从基础到文件操作 本文通过24个编程练习,系统讲解Perl语言的实际应用。内容涵盖基础语法如Hello World程序、数学计算、用户输入处理,到高级功能如文件操作、子程序编写、字符串处理和调试技巧。每个练习均提供完整代码示例与详细解释,帮助读者逐步掌握Perl编程技能,适用于脚本开发、系统管理与数据处理等场景。 阅读详情

相关推荐

Perl基础学习04之IO及读写操作

Perl中print say printf sprintf的使用方法; Perl中格式化输出; Perl中文件的读写(open函数,文件句柄(file handle)​)。

qq_21478261的博客 385

Perl入门学习(十一)文件操作

Perl入门学习(十一)文件操作

m0_61544122的博客 3980

Perl迷宫生成脚本及算法详解

htmltable {th, td {th {pre {简介:探索使用Perl语言编写的迷宫生成脚本,其中Perl的强大文本处理能力和随机性生成工具使得它非常适合创建迷宫。了解深度优先搜索(DFS)、Prim’s和Kruskal’s等迷宫生成算法,以及如何在Perl中使用二维数组和链表等数据结构,以及如何通过随机性、输出格式、库模块、调试和文件操作实现迷宫创建。

weixin_35982453的博客 1627

perl-文件读写

[b][align=center][size=large]perl-文件读写[/size][/align][/b] [b]打开、关闭文件[/b] open (filevar, filename) filevar为文件句柄,或者说是程序中用来代表某文件的代号 filename为文件名,其路径可为相对路径,亦可为绝对路径 open(FILE1,"file1"); open(FILE1,...

android菜鸟的专栏 650

在Genesis中使用Perl的配置.doc

在Genesis中使用Perl的配置。

Altium Designer操作技巧(12)——如何进行邮票孔拼版?

【摘要】本文详细介绍了PCB设计中邮票孔拼板的全流程操作方法。首先解释了邮票孔拼板的定义、核心目的(提高贴片效率、方便生产)和适用场景(异形板、V-CUT无法实现的情况)。重点阐述了关键设计参数,包括孔径、数量、间隙等规范要求,并提供了两种具体操作方案:传统复制粘贴法和新版阵列放置法。文章通过图文详细演示了从PCB复制、邮票孔添加、板框定义到定位孔和Mark点设置的完整步骤,最后强调了对称性、非金属化孔等设计要点,以及需要与板厂确认工艺参数等注意事项。

u012526819的博客 1674

perl 脚本

perl语言 1. 基本语法 perl 语言是用于文本处理语言,它代表实用提取和报告语言,可在各种平台运行(windows unix等) 1.环境搭建与使用 安装perl 软件 perl -v # 检查版本信息 从官网下载perl 软件后,直接将程序添加到环境变量即可。 注意事项(链接:https://www.perl.org/get.html): Perl 在 Window 平台上有 ActiveStatePerl 和 Strawberry Perl 编译器。 ActiveState Perl和 St

qq_38240926的博客 1万+

保姆级教程:用GROMACS的FEP方法计算小分子结合自由能(附完整mdp配置)

本文提供了一份详细的GROMACS自由能微扰(FEP)计算教程,涵盖从系统准备、参数配置到结果分析的全流程。通过具体案例演示如何计算小分子结合自由能,包括λ窗口设计、动力学参数优化及并行化执行技巧,帮助研究者克服FEP计算中的常见问题,获得可靠的自由能数据。

weixin_30598225的博客 353

perl 文件操作

1、读取某文件,如果该文件不存在,则报错,并提示出错原因 open (DB, "/home/ellie/myfile") or die "Can't open file: $!\n"; 运行后提示:Can't open file: No such file or director 2、读写文件的方法: open(FH,"<filename"); # Opens "filename" for reading.读 # The <; symbol is opti...

qq_34110120的博客 610

Linux kernel crypto的介绍和代码导读

在Linux kernel的module_init阶段会将algif_type_skcipher、algif_type_aead、algif_type_hash、algif_type_rng 四种算法注册.在userspace通过netlink调用了,kernel种的af_alg模块收到消息后, 根据上层传来的算法种类名字来选择走哪一个结构体(alg_type_xxx)的ops函数。也就是添加到af_alg维护的alg_types链表种. alg_types链表种仅有这四个数据.

baron-周贺贺-代码改变世界ctw 321

PCL 点云配准-ICP算法(精配准)

ICP(Iterative Closest Point)算法是一种常用的点云精细配准算法。它通过迭代计算将一组点云变换到另一组点云的最佳位置,最终实现精确的对齐。ICP算法在每次迭代中选择与目标点云最接近的点作为对应点,通过计算最小化源点云和目标点云之间的均方误差(MSE)来进行刚性变换(包括平移和旋转)。

纵马踏花向自由 1724

Perl Misc

一、文件操作 1. mkpath use File::Path; my $dir = '/tmp/test_dir'; unless ( -d $dir ) { mkpath($dir)) or die "Cannot mkpath '$dir'"; chmod( 0777, $dir) or die "Cannot chmod '$dir'"; } 2. mkdir m

Ken_Liang_2010的专栏 677

用一台笔记本跑起 SAP HANA:从 express edition 的定位,到本地硬件门槛与安装实操

SAP HANA是面向个人开发者、初创团队与教学科研场景的精简发行版,保留了in-memory列存引擎、SQLScriptAFLGraphSpatial等核心能力,可免费用于开发与一定规模的生产用途(上限为 32 GB RAM)。它最大的特征,是能在资源受限的laptop或上快速落地,让你在本地完成从建模、开发到测试的完整闭环。SAP在交付形态上,提供了多种安装包:预配置的VM OVA、面向Linux的二进制安装包,以及历史上出现过的容器化方案;你可以按现有设备与熟悉的运维方式择优选择。官方文档把VM。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 534

perl open函数的使用

本文和大家重点讨论一下如何读写Perl文件,主要包括打开、关闭Perl文件,读写Perl文件,Perl文件的状态,命令行参数和打开管道六部分内容,希望通过本文的学习你对读写Perl文件有深刻的认识。 读写Perl文件 一、打开、关闭Perl文件 语法为open(filevar,filename),其中filevar为Perl文件句柄,或者说是程序中用来代表某Perl文件的代号,fi...

a701811173的博客 656

用C#+Avalonia写跨平台串口工具:Windows/macOS/Linux通吃,还能解析Modbus+画实时曲线

不管是串口还是蓝牙,核心操作都是“打开连接、发数据、收数据、关连接”,先定义一个// 通信设备接口:统一串口/蓝牙的操作// 连接状态变化事件(UI层订阅)// 接收数据事件(收到数据后触发)// 通信配置(不同设备配置不同,用泛型)// 通信设备接口:统一串口/蓝牙的操作 public interface ICommDevice : IDisposable {// 连接状态变化事件(UI层订阅) event Action < bool > OnConnectionChanged;

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 997

Hermes 教程 05:多 Agent 编排

本文介绍了Hermes v0.13.0中的四种多Agent协作模式:1)delegate_task快速子任务模式,适合2-3个独立并行任务;2)spawn子Agent模式,实现零成本并行多步流水线;3)tmux交互子Agent模式,支持长期自主任务;4)全新Kanban看板系统,提供持久化AI团队协作框架。各模式在隔离级别、时长、工具访问和适用场景上存在差异,其中spawn模式通过独立上下文窗口实现零上下文成本。文章详细说明了每种模式的使用方法、限制条件和典型应用场景,并提供了具体代码示例和可视化流程图。K

程序猿_三产 535

perl文件操作

打开文件  open 标识符(一般全为大写,但是必须与系统已经定义的三个默认的文件句柄STDIN,STDOUT,STDERR),"文件的操作方式和文件名" 读 > 写 >> 追加 +先读后写 +>先写后读 +>>先追加内容,然后读 select函数能把默认的输出设置成用户自定义的文件句柄,并返回前面选定的文件句柄 flock函数为文件加锁,有两个参数,一个为文件句柄,一个为文件锁

周翔的专栏 1081

在 SAP S/4HANA Cloud Public Edition 中掌控 ABAP 生命周期管理:One-Off、Multi-Off 与 Scalable Delivery 的落地方法论

本文系统梳理了SAP S/4HANA Cloud Public Edition中ABAP扩展开发的三种生命周期管理模式:One-Off适用于企业内部扩展,通过Import Collection在三系统间流转;Multi-Off面向少量客户交付,基于gCTS和Git实现不连接系统间的传输;Scalable Delivery则将扩展产品化为add-on,支持规模化分发。文章结合RAP、OData等实际开发场景,对比分析了各模式的特点与适用边界,为国内团队提供了符合Public Cloud要求的开发与交付实践建议

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1495

linux下perl视频教程,perl 简明教程 perl教程集合

前言:perl是什么,干什么用的?perl原来设计者的意图是用来处理 字符的,80%的强项是处理字符,当然其它的很多都可以。现在很多网页也是用perl的,通常需要CGI环境,比如 $char =~ /语言/ ,意思是查找含有“语言”这两个字的字符串。它还能做unix和linux系统管理,文件内容处理(基于awk和sed等工具的功能),其他好多你想做的事。一、perl环境配置1.获取perlPerl...

weixin_40008339的博客 219

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Perl文件相关函数

open函数open函数将文件变量与某文件联系起来,提供访问文件的接口,例如:open(MYVAR, "/u/file"); 如果文件打开成功,则返回非零值,否则返回零。缺省地,open打开文件用以读取其内容,若想打开文件以写入内容,则在文件名前加个大于号:open(MYVAR, "&gt;/u/file"); 向已有的文件末尾添加内容用两个大于号:open(MYVAR, "&gt;&gt;...

rdman84的博客 203

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Perl 入门

在IC设计领域,Perl是一种常用的脚本语言,对Perl的学习是有必要的。本文为根据B站系列视频的学习笔记。原视频讲解的非常简洁、清晰,推荐看视频学习。本文如有侵权,请联系删除。

yinguofeng1314的博客 1631

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

linux中perl的环境变量,在Perl脚本中使用Bash环境变量?

小编典典这里有两个查询,关于使用Bash变量和运行外部命令。Perl中有%ENV哈希,带有环境变量perl -wE'say $ENV{PWD}'但是,通常最好在脚本中使用等效项,因为脚本的含义可能会有所不同,或者在脚本运行时会有所变化。更重要的是,使用shell命令会使您面临引号,shell注入和解释的各种潜在问题。例如,您显示的命令很危险,如CharlesDuffy注释中所述。原则上,最好使用P...

weixin_42347375的博客 1541

21. Perl 文件操作-文件读写

笔者说过, Perl 语言是非常删除处理文本的, 同样,perl 语言对文件的读写方式也非常简单。 1 文件句柄 perl 程序通过文件句柄对文件进行文件读写 文件句柄相当于一个指针, 指向这个文件; 定义文件句柄有两种方式: 一种是会名称全部时大写, 另一种时是定位为标量, 笔者建议句柄使用标量, 因为perl默认的文件句柄为全部大写. perl 内置句柄有: STDIN, STDOUT, S...

Java 程序源 9916
上一篇: 分享:Perl打开与读取文件的方法
下一篇: jquery模拟SELECT下拉框取值效果
my_baby_2009
博客等级 码龄14年 31粉丝 38原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值