Perl语言基础总结---强大的文件目录及文件操作

这篇博客介绍了Perl语言在文件和目录操作上的强大功能,重点讲述了如何通过递归遍历查找特定条件的文件,并将结果记录在文本文件中。作者分享了一个实例,展示如何在当前目录及其子目录下搜索满足条件的文件,并将找到的文件路径写入一个txt文档,同时提到了在Windows系统下处理文件路径时File::Spec模块的重要性以及5.010模块的便利特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    1987年,Larry Wall发明perl语言以来,perl语言逐渐发展强大,并且应用非产广泛,在读《Perl语言入门(第五版)》教程的时候不得不感慨,perl竟然把文件操作作为核心操作,并用了两大章的篇幅来阐诉文件目录及文件的操作的灵活,受益匪浅呀!按耐不住激动地心情,把这份快乐迫不及待的分享给大家,并且写了一个短小的例子,来拓展一下。好吧,闲话少叙,进入正题吧!


    实例目的:在当前目录下,寻找满足自己需要的文件

    实例思路:通过递归遍历当前目录及其目录下的文件,并将文件属性与所需文件属性比较,返回所需文件目录,并写入一个txt文档中。

    递归遍历的步骤:

1 将当前目录列表送入栈,然后第一个元素出栈;

2 判断第一个元素是否是目录,如果是目录则重复步骤1;

3 否则判断第一个元素是否是文件,如果是文件则与所需文件属性比较,如果比较成功,则将文件目录写入test.txt文件中;

4 如果无法判断当前文件目录,输出错误。

   值得指出的是

1、当把当前目录列表送入栈时,其中包括了.(当前目录)..(上一目录),我们必须把这两个元素排除在外。

2、在windows系统下处理文件路径是要用到File::Spec模块,少去了路径处理所带来的麻烦

3、我们可以使用 5.010模块,里面有很多简单有趣的特性,比如say 输出换行。

    下面一个例子用来演示递归当前目录,将目录及文件路径写入”目录.txt”,若要进一步扩展,可以在判断是文件后添加if语句。

程序源码:

use 5.010;
use File::Spec;
sub  readfile{
    my $count=0;#用来记录栈中元素
    my $mydir=shift @_;#子例程读取参数,必须用shift,否则返回参数个数!
    opendir DH,$mydir or die "cannot open$mydir:$!";#目录操作,获得句柄DH
    foreach $file(readdir DH){
          $file=File::Spec->catfile($mydir,$file);#将目录与文件名连接起来
          $count++;
          if ($count!=1 and $count!=2){#只要不是.(当前目录)..(上一目录)
              if (-d $file ){#-d如果当前是目录
                     say FILE "\t\t——————当前目录是 ",$file;
                     $file="\.\\$file";
                     &readfile($file);#递归目录
               }elsif( -f $file){-f如果当前是文件
                     say FILE "当前文件是 ",$file;
               }else{
                     say FILE "other",$file;
              }
          }
       }
    closedir DH;
}
if(!openFILE,">>目录.txt"){
    die "cannot create file:$!";
       }
&readfile(".");
closeFILE;
say"已经完成,请打开当前目录下的'目录.txt',按任意键继续………";
<STDIN>;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值