Perl的opendir
http://www.voidcn.com/article/p-nefizzyw-ber.html 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,51); font-family:Arial; font-size:13.63636302947998px; line-height:26px"> or die "Can't open $path:$!";#打开文件句柄 foreach (readdir DTDIR){ next unless $_ =~ /.dt$/; $_="$path/$_";#双引号内内插,单引号不可以 push @dtfs,51); font-family:Arial; font-size:13.63636302947998px; line-height:26px"> } #如果没有加上目录名,则测试部分将只检测当前目录下的文件,而不是$path下的文件。这是使用目录##句柄最常犯的一个错误 print "@dtfs"."/n";#@data_files foreach (@dtfs){ #$^I = "~";#须与<>结合使用才能有效 open DATA,51); font-family:Arial; font-size:13.63636302947998px; line-height:26px"> or die "Can't open '$_':$!";#打开读入句柄 #文件句柄(filehandle)是Perl 程序I/O 连接的名字,是Perl 和外界的纽带 my @array = <DATA>; foreach (@array){ chomp; @array = sort {$a<=>$b} @array;#排序 open DATAOUT,51); font-family:Arial; font-size:13.63636302947998px; line-height:26px"> or die "Can't open '$_~':$!";#打开写出句柄 printf DATAOUT "%20d/n" x @array,@array; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |