2012-02-13 1 views
2

Я пытаюсь написать perl-скрипт, который читает имена файлов в файле test.txt в массив, а затем удаляет файлы на основе имен файлов в массиве. Вот что у меня до сих пор ...удаление файлов с 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

Первый намек будет проверить ошибку: 'Unlink ($ строка) или предупредить "$ 0: не может разъединить $ строку: $! \ П"' – tripleee

ответ

11

Линии, считанные из файла с оператором readline (<...>), будут содержать символ новой строки. Вам нужно будет удалить его, иначе вы попытаетесь удалить файл с именем "myfile.txt\n" вместо "myfile.txt". Используйте chomp функцию Perl, чтобы обрезать вход:

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

You также может выполнять 'chomp @data; unlink @data; ', поскольку обе команды принимают списки в качестве аргументов. То есть нет необходимости в цикле. – TLP

+0

@TLP, тогда сложнее проверить наличие ошибок. – ikegami

+1

@ikegami Это будет так же просто, как и раньше, чтобы проверить наличие ошибок, но в случае ошибки вы не сможете определить, какой файл не может быть удален. – TLP