2012-02-13 61 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