2011-12-20 122 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 
    );