2012-02-13 55 views
2

我正在嘗試編寫一個將test.txt文件中的文件名讀入到數組中的perl腳本,然後根據數組中的文件名刪除這些文件。這裏就是我這麼遠......用Perl刪除文件

#!/usr/bin/perl 
use strict; 
use warnings; 

open(FILE, "test.txt") or die("Unable to open file."); 

my @data = <FILE>; 

close(FILE); 

foreach my $line (@data){ 
     unlink($line); 
} 

的test.txt和remove_files.pl在同一個目錄中被刪除的文件。我無法弄清楚爲什麼腳本不會刪除這些文件。我錯過了一個模塊嗎?

+2

第一個暗示是檢查錯誤:'取消鏈接($線)或警告「$ 0:無法取消鏈接$行:$ \ N!」' – tripleee 2012-02-13 19:25:02

回答

11

從帶有readline運算符(<...>)的文件中讀取的行將包含換行符。您需要將其刪除,否則您將嘗試刪除名爲"myfile.txt\n"而不是"myfile.txt"的文件。使用Perl的chomp功能修剪您的輸入:

foreach $line (@data){ 
    chomp($line); 
    unlink($line); 
} 
+6

你也可以做'chomp @data;取消鏈接@data;',因爲兩個命令都以列表作爲參數。即不需要循環。 – TLP 2012-02-13 18:23:07

+0

@TLP,然後很難檢查錯誤。 – ikegami 2012-02-14 05:51:25

+1

@ikegami它會像以前一樣容易檢查錯誤,但如果出現錯誤,您將無法分辨哪些文件無法刪除。 – TLP 2012-02-14 13:47:59