http://blog.csdn.net/metasearch/article/details/5488513

perl中的句柄分两种:文件句柄和目录句柄

对于句柄有三种操作:打开(open,opendir),读入(readline,readdir),和关闭(close,closedir)。

一、文件句柄

文件句柄(filehandle)是Perl 程序I/O 连接的名字,是Perl 和外界的纽带。

当需要不同的文件句柄时,使用open 操作通知Perl,Perl 再请求操作系统来建立同外部的连接。如:

open CONFIG, “<”, “dino”;

open BEDROCK, “>”, $file_name;

open LOG, “>>”, &logfile_name();

分别告诉perl打开了读入、输出和追加句柄,perl请求操作系统建立同外部的链接,然后就可以使用句柄进行相应的操作了。

以前我们使用过STDIN句柄进行输入操作,如

$path=<STDIN>;@names=<STDIN>;

以通过键盘输入得到需要的标量和列表。我们可以以相同的方式使用其他句柄输入,如

open DATA,$_

or die "Can't open '$_':$!";#打开读入句柄

my @array = <DATA>;#将文件中的所有行读入列表array

写出(>)或追加的(>>)的文件句柄,可以和print 或printf 结合使用,如:

open DATAOUT,">","$_~"

or die "Can't open '$_~':$!";#打开写出句柄

printf DATAOUT "%20d/n" x @array,@array;#写入文件中,注意句柄和要打印的内容之间没有逗号

二、目录句柄

不是读入文件的内容,而是将一个目录中的文件名(以及一些其它东西)读入,如

opendir DTDIR,$path

or die "Can't open $path:$!";#打开文件句柄

foreach (readdir DTDIR){

next unless $_ =~ /.dt$/;

$_="$path/$_";#双引号内内插,单引号不可以

push @dtfs,$_;

}

注意:需要将路径名加上,以得到文件的全名(路径名+文件名),否则的话测试部分将只检测当前目录下的文件,而不是$path下的文件。这是使用目录句柄最常犯的一个错误。

附:句柄练习代码

#!C:/strawberry/perl/bin/perl.exe -w

#use warnings;

use strict;

my @dtfs;

#my @data_files = glob "*.dt";

print "Please input the directory path include data files:/n";

chomp(my $path = <>);#note:使用<>输入时,一定记得使用chomp去掉回车符!!!

###1:输入路径,查找.dt文件并写入列表

#my @dtfs = <$path/*.dt>;#尖括号中的值同双引号中的值一样,会被内插,等同glob操作

###2:使用目录句柄打开目录,使用这则表达式写入列表

opendir DTDIR,$path

or die "Can't open $path:$!";#打开文件句柄

foreach (readdir DTDIR){

next unless $_ =~ /.dt$/;

$_="$path/$_";#双引号内内插,单引号不可以

push @dtfs,$_;

}

#如果没有加上目录名,则测试部分将只检测当前目录下的文件,而不是$path下的文件。这是使用目录##句柄最常犯的一个错误

print "@dtfs"."/n";#@data_files

foreach (@dtfs){

#$^I = "~";#须与<>结合使用才能有效

open DATA,$_

or die "Can't open '$_':$!";#打开读入句柄

#文件句柄(filehandle)是Perl 程序I/O 连接的名字,是Perl 和外界的纽带

my @array = <DATA>;

foreach (@array){

chomp;

}

@array = sort {$a<=>$b} @array;#排序

open DATAOUT,">","$_~"

or die "Can't open '$_~':$!";#打开写出句柄

printf DATAOUT "%20d/n" x @array,@array;

}

Perl的opendir相关推荐

  1. Perl常用的内置变量

    先来一个例子吧 #!/usr/bin/perl usewarnings; @array =qw(a b c d); foreach(@array) { print$_,"\n"; ...

  2. perl常用环境变量(转帖)

    2008-12-25 17:18:51|  分类: Perl|字号 订阅 先来一个例子吧 #!/usr/bin/perl use warnings; @array = qw(a b c d); for ...

  3. Perl opendir()函数

    语法 opendir DIRHANDLE, EXPR 定义和用法 打开目录EXPR,并将它与DIRHANDLE关联进行处理,使用readdir函数. 返回值 0 - 失败 1 - 成功 实例 试试下面 ...

  4. perl 取出目录中的所有文件并存入文件中

    我们可以把从目录中取出的所有文件打印到文件中: #!/usr/bin/perl -wT use File::Copy; use strict; print "取文件,请输入文件路径:&quo ...

  5. 开发日记-20190716 关键词 读书笔记 《Perl语言入门》Day 10

    文件测试操作符及其意义 文件测试操作符 意义 -r 文件或目录,对目前(有效的)用户或组来说是可读的 -w 文件或目录,对目前(有效的)用户或组来说是可写的 -x 文件或目录,对目前(有效的)用户或组 ...

  6. perl基本语法--转载

    http://www.cnblogs.com/zhtxwd/archive/2012/03/06/2381585.html 本文介绍从变量类型.操作运算符.控制叙述.子程序.I/O和档案处理. Reg ...

  7. Perl学习笔记(2)

    在本章中将要学习:(1)如何获得目录列表 (2)如何创建和删除文件 (3)如何创建和删除目录 (4)如何获取关于文件的信息. 一.获得目录列表 目录句柄与文件句柄的不同之处是:文件是通过读取文件句柄获 ...

  8. Perl文件句柄引用

    目前还没介绍Perl的面向对象,所以这节内容除了几个注意点,没什么可讲的. 以前经常使用大写字母的句柄方式(即所谓的裸字文件句柄,bareword filehandle),现在可以考虑转向使用变量文件 ...

  9. Perl文件及目录操作

    本文转自:http://www.blogjava.net/weidagang2046/articles/61995.html 大多数程序都不是孤立的,它们与它们的环境相互作用.很 多的程序也需要通过文 ...

最新文章

  1. [LeetCode]Merge Intervals
  2. java多线程学习-java.util.concurrent详解(一) Latch/Barrier
  3. 最新的Windows phone Developer tools RTW 发布了
  4. 大数据之HBase部署
  5. table表头多选框禁用 vue_Vue踩坑小记(四)
  6. Ubuntu 18.04 rc.local systemd设置
  7. 2021年Java大厂面试必备面试题
  8. 【To Understand !!! DP or 递归】LeetCode 87. Scramble String
  9. linux 修改时间 date
  10. JDK11竟然不支持字体斜体
  11. c# printDialog不显示问题
  12. 关于Tacotron2看这一篇就够了
  13. FOFA网络空间搜索引擎使用教程
  14. 复选框至少选择一项_如果没有设计师,您至少要选98种材料,学会35项工艺!...
  15. 灯哥开源ODRIVE FOC驱动器使用记录
  16. win10关闭了微软服务器,win10自带安全软件怎么关闭|win10关闭自带杀毒软件的两种方法...
  17. 程序员数学(13)--轴对称与等腰三角形
  18. 雷军的猪已经落地了,那人工智能的猪该飞去哪?
  19. 总结xml,适合初学者
  20. TED地道用语学习 - <脆弱的力量> - 2

热门文章

  1. Wireshark(鲨鱼鳍)抓包工具
  2. 软件实施工程师面试总结
  3. vjdesign - vue 界面可视化设计器
  4. 为什么1个字节(Byte)等8位(Bit)?
  5. 技术分享 | 使用 cURL 发送请求
  6. 机器学习(2)逻辑回归
  7. MATLAB之拉氏变换
  8. 运行时错误‘-2147467259(80004005)’
  9. java spring ioc 实例_Spring 源码阅读(IOC容器)-bean的实例化以及注入
  10. python高级编程(6) - 对象引用,可变性和垃圾和回收