2011-08-03 2 views
0

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

D:>xyz.prl < input.txt 

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

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

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

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

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

Спасибо,

Segu Благодаря Segu

+0

Может быть, вы могли бы показать нам код? – TLP

+1

Это называется блокировкой, а не бесконечным циклом. Бесконечный цикл потребляет процессорное время, а блокировка - нет. –

ответ

1

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

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

#!/bin/sh 
#! -*- perl -*- 
eval 'exec $PERLLOCATION/bin/perl -x $0 ${1+"[email protected]"} ;' 
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; 
    } 
} 
2

С перенаправлении оболочки 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 
} 
Смежные вопросы