Как передать аргументы в виде текстового файла Perl-скрипту во время выполнения - PullRequest
0 голосов
/ 03 августа 2011

У меня есть файл сценария perl, который называется xyz.prl.Если я запускаю это в командной строке, то он будет запрашивать ввод данных в командной строке.Поэтому я поместил все входные данные в отдельный файл, называемый input.txt.Затем я использовал следующую команду в командном окне:

D:>xyz.prl < input.txt

Но она не берет значения из файла input.txt и не входит в бесконечный цикл, запрашивая первое значение.

Если я даю только xyz.prl, то он запрашивает входные значения.и принимаю значение, которое я даю вручную.

На самом деле мне нужно разработать приложение на основе диалога VC ++ (MFC) и использовать windowsXP.В этом я должен использовать системную команду для запуска этого xyz.prl и передать все аргументы в виде текстового файла (input.txt).Мне очень жаль сообщать вам, что файл xyz.prl является высокозащищенным, и я не могу поделиться кодом.

Если я даю xyz.prl непосредственно в командной строке, он запрашивает входные значения по одному,Но с помощью системного вызова я не могу отправить такие значения.

Я совершенно новичок в Perl.Поэтому, пожалуйста, дайте мне знать команду, которую я должен передать системной команде.

Спасибо,

Сегу Спасибо, Сегу

Ответы [ 2 ]

2 голосов
/ 03 августа 2011

С перенаправлением оболочки xyz.pl < input.txt Я полагаю, вы даете ввод из файла через STDIN, который можно прочитать с помощью <STDIN> или оператора алмаза <>.

Однако общий способ чтения данных из файла:

Использование:

$ xyz.pl input.txt

Код:

use strict;
use warnings;
use ARGV::readonly;

while (<>) {
    # $_ variable contains each line from the file
}
1 голос
/ 03 августа 2011

Это потому, что input.txt не будет передан в качестве параметра - он будет доступен в виде потока. В приведенном ниже примере это "while (<>)"

http://alumnus.caltech.edu/~svhwan/prodScript/perlGettingInput.html

#!/bin/sh
#! -*- perl -*-
eval 'exec $PERLLOCATION/bin/perl -x $0 ${1+"$@"} ;'
if 0;

$okayToPrint = 0;
while (<>) {
    my $currLine = $_;
    if ($currLine eq "WorldBegin\n") {
        $okayToPrint = 1;
    } elsif ($currLine eq "WorldEnd\n") {
        $okayToPrint = 0;
    } else {
        # some line between WorldBegin and WorldEnd
        print $currLine;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...