2011-12-20 82 views
-6

我需要使用Perl存储在数组中的所有目录和子目录的列表。列出具有路径的数组的目录和子目录;

例如:

$array[0] = '/home'; 
$array[1] = '/home/ali'; 
$array[2] = '/home/perl'; 
$array[3] = '/home/stackoverflow'; 
$array[4] = '/home/ali/desktop'; 
$array[5] = '/home/ali/sub'; 
$array[6] = '/home/stackoverflow/new'; 
+0

目录的列表和它们的子目录,你程序发现自己呢?而不是你从输入文件中提供信息,或许使用'ls'编译。 –

+0

我可以使用'ls'来列出数组吗? – thi

+0

'ls',如果你在linux机器上会列出当前工作目录中的文件和子目录。如果你只想要子目录,可以cd到'home /',然后在bash终端中尝试'find home/-type d',这会打印出你所有子目录的列表,包括'/ home'。然后,您可以将其作为输入文件(更简单)输入到您的程序中,或者让您的程序运行该命令,可能就像调用bash脚本一样。不过,这些命令只能在Unix系统上运行。 –

回答

6
use File::Find::Rule; 
my @array = File::Find::Rule->directory->in('/home'); 

File::Find::Rule

+6

好吧,你需要告诉我们,为什么你不能使用显示的方式,如果我们要建议一个替代品,没有相同的未说明的缺陷... – tadmc

1
my @array = ('/home', grep -d, glob '/home/*'); 
+4

这将不会按照要求递归,它会跳过名称开始的目录与'.' – ikegami

0

你可以做到这一点的老式的方法:

File::Find::find(sub { 
     say $File::Find::name if -d $File::Find::name 
    }, @array 
    );