温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Perl目录句柄基本操作有哪些

发布时间:2021-12-06 10:34:11 来源:亿速云 阅读:111 作者:小新 栏目:开发技术

这篇文章主要介绍Perl目录句柄基本操作有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

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

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

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

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

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

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

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

nextif$name=~/^\./;

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

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

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

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

以上是“Perl目录句柄基本操作有哪些”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI