Perl目录句柄基本操作解析

开发 架构
Perl语言有很多值得学习的地方,你对Perl目录句柄的概念你了解吗,本文就向大家简单介绍一下有关Perl目录句柄的内容,希望对你有所帮助。

本文和大家重点讨论一下Perl目录句柄操作,从给定目录得到其文件名列表的方法还可以使用Perl目录句柄(directoryhandle),Perl目录句柄外形及其行为都很像文件句柄。这里和大家简单分享一下。

Perl目录句柄操作(opendir,readdir,closedir)

从给定目录得到其文件名列表的方法还可以使用Perl目录句柄(directoryhandle)。Perl目录句柄外形及其行为都很像文件句柄。打开(使用opendir而非open),从中读入(使用readdir而非readline),关闭(使用closedir而非close)。不是读入文件的内容,而是将一个目录中的文件名(以及一些其它东西)读入,如下例:
 

  1. my$dir_to_process="/etc";  
  2. opendirDH,$dir_to_processordie“Cannotopen$dir_to_process:$!”;  
  3. foreach$file(readdirDH){  
  4. print“onefilein$dir_to_processis$file\n”;  
  5. }  
  6. closedirDH;  

同文件句柄一样,Perl目录句柄会在程序结束时自动关闭;或者当Perl目录句柄被重新打开而指向另一个目录时,也会自动关闭。

在Perl以前的版本中,globbing它会调用别的进程;Perl目录句柄不会,因此它更有效率,能更有效的利用系统资源。但是,这是一种底层(lower-level)的操作,意指我们需要自己处理更多的事情。

  1. while($name=readdirDIR){  
  2. nextunless$name=~/\.pm$/;  
  3. …moreprocessing…  
  4. }  

上述的语法是正则表达式而非glob。如果想要所有的非点(non-dot)文件(不是由点开头的文件),可以使用:

 

  1. nextif$name=~/^\./;   

 

如果想要除了通常的点(当前目录)以及点点(父目录)之外的所有文件,我们可以明确地使用下面的语句: 

  1. nextif$nameeq“.”or$nameeq“..”; 

现在我们讨论最容易混淆的部分,请打起精神来。readdir操作返回的文件名没有路径名部分,而只是文件名。因此,我们的得到的不是/etc/passwd而是passwd。由于这又是一个不同于globbing的地方,人们也经常在这里出现混淆。
你需要将路径名加上,以得到文件的全名(路径名+文件名):

  1. opendirSOMEDIR,$dirnameordie“Cannotopen$dirname:$!”;  
  2. while(my$name=readdirSOMEDIR){  
  3. nextif$name=~/^\./;#跳过点文件  
  4. $name=“$dirname/$name”;#加上目录名  
  5. nextunless–f$nameand–rname;#除非是可读文件如果没有加上目录名,则测试部分将只检测当前目录下的文件,而不是$dirname下的文件。 

这是使用Perl目录句柄最常犯的一个错误

【编辑推荐】

 

  1. 深入学习Perl运算符用法
  2. Perl文件句柄概念详解
  3. 实例解析Perl多进程技术的应用
  4. 解析Perl命令行程序用法
  5. 学习笔记 解析六大Perl运算符用法

 

责任编辑:佚名 来源: csdn.net
相关推荐

2010-07-15 13:50:16

Perl目录操作函数

2010-07-14 15:23:19

Perl文件句柄

2010-07-14 12:57:59

Perl字符串

2010-07-19 11:12:43

Perl 不等于

2010-07-14 15:05:21

Perl文件句柄

2010-07-20 14:41:55

Perl语法

2010-07-14 14:46:57

Perl操作符

2010-07-15 09:49:23

Perl标量

2021-02-19 08:05:38

Linux命令系统

2010-07-20 15:18:41

Perl基本语法

2010-07-14 14:55:07

Perl操作符

2010-07-21 13:59:59

Perl引用

2010-07-19 09:52:04

Perl标量

2010-07-13 13:49:43

Perl foreac

2010-07-19 08:39:14

Perl包

2010-07-20 15:02:20

Perl数组

2010-07-13 14:26:11

Perl数组

2010-07-26 14:30:29

Perl Push

2009-10-28 13:46:44

VB.NET目录

2021-12-13 12:00:08

FreeDOSLinux
点赞
收藏

51CTO技术栈公众号