Как я могу записать вывод в новый внешний файл с помощью Perl? - PullRequest
4 голосов
/ 20 мая 2010

Возможно, я ищу неправильные ключевые слова, или это очень простой вопрос, но я не могу найти ответ на свой вопрос. У меня проблемы с записью результата моей команды whois в новый внешний файл.

Мой код ниже. Требуется $readfilename, которое является именем файла со списком IP-адресов, и $writefilename, которое является целевым файлом для вывода. Оба указаны пользователем. Для моих тестов $readfilename содержит три IP-адреса в трех отдельных строках, поэтому в указанном пользователем выходном файле должно быть три отдельных результата whois.

if ($readfilename) {
    open (my $inputfile, "<", $readfilename) || die "\n   Cannot open the specified file.     Please double check your file name and path.\n\n";
    open (my $outputfile, ">", $writefilename) || die "\n   Could not create write file.\n\n";
    while (<$inputfile>) {
        my $iplookupresult = `whois $_ > $writefilename`;
        print $outputfile $iplookupresult;
    }
    close $outputfile;
    close $inputfile;
}

Я могу выполнить этот сценарий и получить новый внешний файл, но более половины файла содержит двоичные данные мусора (работающие в CentOS), и только один (или часть из одного) поиска в whois доступна для чтения. 1009 *

Я понятия не имею, как половина моего файла заканчивается двоичным ... но мой подход должен быть неверным. Есть ли лучший способ достичь того же результата?

1 Ответ

7 голосов
/ 20 мая 2010

Вы используете перенаправление оболочки для перенаправления вывода whois в файл. Но вы также открыли файл для записи и пытаетесь записать данные в тот же файл, что дает вам мусор. Просто сбросьте перенаправление оболочки:

print $outputfile `whois $_`;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...