关注于测试自动化和测试管理,我是一个永远的测试新手。

Perl练习题:遍历所有目录

上一篇 / 下一篇  2008-12-16 15:26:39 / 个人分类:perl

b\O*S0sw1U3t0Perl练习题:遍历所有目录

z"E!f7^H9i&p|051Testing软件测试网gN }:N*j7FH

qiguojie原创文章,转载请注出处,谢谢!

-^Pt`I^y,u0

%?)a;bv%]rN0自己写的练习程序,有几点不足:51Testing软件测试网#M)T E4u6O
1、正则表达式只是过滤了*.*格式的文件,但是无法对付没有扩展名的文件。51Testing软件测试网Q*A C p})\-D5bs#D:o
2、无法对付目录名有“.”的目录
,Fm O3y [^03、无法对付系统中限定访问权限的目录51Testing软件测试网a _:U]y'}lw

mTu%k S%o%U#w,u*wo\0程序主要实现功能:
&G,obW2~9@+o`c01、输入C\D\E\F,可以遍历这个盘符下面的所有目录51Testing软件测试网noC1uf(| EU
2、结果输出到E盘根目录下面的perllog.log
(oy5ZT I4Lc0#-------------------
5`2r7mn'YS{s0#Author:qiguojie
$]7V `FJ5[%r8b0#Date:2008-12-16
-g$Ktxy6Fc j0#-------------------

x'O;s#E r6F ~ v051Testing软件测试网` q@e:J"o

51Testing软件测试网.D"q6o`Gg"P
#!/usr/bin/perl  -w51Testing软件测试网f ~ |Ft'T&E`

.Kh&[4lt v.M7y0use strict;51Testing软件测试网Cxi1R_;g&@ X@

/GB&`B0[$^+gS0#定义保存搜到目录的数组51Testing软件测试网*HtE+Xc a:Z-F
my @alldir = ();51Testing软件测试网fg \&R[$NP

51Testing软件测试网1lR/F([8m1g7D6S

#编写一个函数,输入一个路径,搜索这个路径下面的所有文件和目录,并把符合条件的目录保存到alldir数组中
? h A:L/u*]?\-_/QA0sub pdir
*Q1B8L+n2N5WE0{
|Z#bUx R:Du4dE0   #获取参数
:_$G y{Z}3a0   my ($enter) = @_;51Testing软件测试网z)],n#rz(Oc-@{2C
   printf ("Searching DIR:$enter...\n");
G ZHnN.s'F0   #打开目录,如果打开失败,退出函数51Testing软件测试网NqVLV5xkU{
   opendir (TEMP,$enter)||die return -1;51Testing软件测试网ku,ic$m,Af
   #依次取得文件或目录名过滤,不要包含*.*格式的目录或文件,保存合法的到tempdir数组中
fS'^W2V2I0   my @tempdir = grep(!/.*\..*/i,readdir TEMP);51Testing软件测试网,HT\"{$EE
   #获得此时tempdir的数组元素个数51Testing软件测试网z/G w1I6g;ac
   my $arraysize = @tempdir;51Testing软件测试网Wq;[*Jjk
   if ($arraysize != 0)
2H[A%L_VcEh0   {51Testing软件测试网 q#BW%E!O&FJ
      #循环遍历每个数组元素51Testing软件测试网7i+c]8JOL
      for (my $i=0;$i<$arraysize;$i++)
"vz&aT3B0      {51Testing软件测试网h-YX N"YV;QBj5|
        #组合成合法的目录元素
8e$h{+_ P,yA7Aj0        $tempdir[$i] = $enter."/".$tempdir[$i];
*i jHZ5R$u8b!F"}*_0      }
;W;VX6X#PFn K0      #将tempdir压入堆栈数组alldir
/|olQx.\n0      push (@alldir,@tempdir);51Testing软件测试网VE&V3S2v;I
      closedir TEMP;51Testing软件测试网}k6j(N9I9S0Z;g
      return 0;51Testing软件测试网X1Q#\4^ iX?"c
   }51Testing软件测试网l d7y{-y)j"gf
}

9z2sNZhw8w051Testing软件测试网 SIURV{

print "--------ReadDir----------\n";51Testing软件测试网@7A j(|/zI,G&_f8L
print "which Driver you want Read?C,D,E,F?Enter you choose:";51Testing软件测试网 M Y f4F-| }a?z}
my $which = <STDIN>;
6GG_yI!| t1F0chomp $which;51Testing软件测试网 nsAg7f
#连接字符串,得到格式如d:
bf*K'dT(x ef0my $t =$which.":";51Testing软件测试网e+lC1RgB3J
#调用函数pdir,获得第一个目录下面的所有符合条件的目录,并保存到alldir中
Xr-u+pOj0pdir($t);
d+IMw$q/X#f0my $n = @alldir;51Testing软件测试网[Q\ p"O$dJ%Z^
#遍历alldir,依次获取alldir中每个元素目录下面的目录,再将结果保存到alldir中
ot+L.h3bu"R0for (my $j=0;$j<$n;$j++)51Testing软件测试网aG"ot e+z)E9}.Pl
{
xA2@FNF#o0  pdir($alldir[$j]);51Testing软件测试网(nlxJ_zq+Nk)@
  #重置循环种子,使循环可以循环到数组的结尾,遍历所有元素51Testing软件测试网$eHS~q5[+O7F,h"N
  $n = @alldir;51Testing软件测试网{#B(b#`a2f*]UN(T
  print "$n\n";51Testing软件测试网G)f-z#H*Rb?1U
}51Testing软件测试网O1X n}l
#以追加方式打开文件perllog.log,保存堆栈中所有元素到这个文件
){P.P1Qw?0open(FN,">>E:/perllog.log")||die;
aD\B7\{(Bea,G0my $n1 = @alldir;
l*}6K3q1qFSeQ0for (my $i=0;$i<$n1;$i++)
"\Xj-pD;b)g8\#[)}^0{
$X6hD h}1jK0   printf FN "$alldir[$i]\n";
'^I/C C Dg0}
m*o"] j1UV0close FN;

|B)B5u] h(~q{z0

TAG: perl

 

评分:0

我来说两句

qiguojie

qiguojie

北京测试一草根儿

日历

« 2023-11-22  
   1234
567891011
12131415161718
19202122232425
2627282930  

数据统计

  • 访问量: 119865
  • 日志数: 39
  • 图片数: 1
  • 建立时间: 2007-06-05
  • 更新时间: 2011-06-29

RSS订阅

Open Toolbar