2010-09-08 83 views
-2

我在一個目錄中有一個文件,我想從目錄中一次選擇一個特定的文件。如何使用Perl在目錄中搜索特定文件?

守則如下:

$xml_file_name = <STDIN>; 
chomp ($xml_file_name); 

@o = file_search($xml_file_name); 
print "file::@o\n"; 

sub file_search 
{ 
    opendir (DIR, "/home/sait11/Desktop/test/Test cases") or die "Failed to open directory\n"; 
    @dirs_found = grep { /$xml_file_name/ } readdir DIR; 
    closedir (DIR); 
# print "dir ::@dirs_found\n"; 
    return @dirs_found; 
} 

我輸入要返回sample.xml文件名。但是在@dirs_found變量中,所有以's'開頭的文件名都被存儲。

如何一次找出確切的一個文件?

+6

您應該使用'使用警告';'和'嚴格使用'。而你正在學習Perl,因爲它們可以幫助你發現你不知道你可以犯的錯誤。當你是專家時,你使用'使用警告';'和'嚴格使用'。反射性的,因爲它們幫助你捕捉到愚蠢的錯誤。 – 2010-09-08 11:43:03

+0

@Jonathan Leffler對於初學者,您對「使用診斷」有何看法,而不是「使用警告」?我總是矛盾的。它給你更多的信息,但它又給你**更多的信息**。 – 2010-09-08 11:50:02

+0

@Chas:建議總是'使用警告';'和'嚴格使用'。 - 我不知道「使用診斷」;直到你問。然而,Perl 5.12.1手冊說診斷是核心,而頁面底部的日期是1995年,所以它幾乎是永遠(幾乎)。由於它似乎使'使用警告;'更容易理解,但不提供新功能,如果您使用診斷而不是警告 - 我不認爲這很重要 - 但我懷疑我是否會改變。關鍵是讓Perl儘可能幫助你。 – 2010-09-08 11:58:09

回答

8

要查找特定的文件,只需打開文件,或在其上運行一個文件測試:

my $file = "/home/sait11/Desktop/test/Test cases/$xml_file_name"; 

print "$file found\n" if -f $file; 

運行你的代碼,它肯定似乎工作。如果你輸入一個模式,那麼它會正確地從目標目錄中選出與你輸入的Perl正則表達式相匹配的文件名。你在找什麼名字?

如果您修改grep閱讀:

my @dirs_found = grep { /^$xml_file_name$/ } readdir DIR; 

那麼它將排除在正則表達式不匹配,整個名值。另一方面,當你這樣做時,你會放棄一些靈活性。

-4

得到答案,我必須給出整個文件名,以便它只匹配該特定文件。

+5

呵呵?你知道完整的路徑了嗎?如果是這樣,你不必搜索,只需使用-f $文件作爲@Jonathan建議 – 2010-09-08 12:51:47

相關問題