Perl的opendir

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;

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值