2011-08-03 7 views
0

xyz.prlというperlスクリプトファイルがあります。 これをコマンドプロンプトで実行すると、いくつかのコマンドライン入力が要求されます。 したがって、すべての入力をinput.txtという別のファイルに配置しました。 次に、コマンドウィンドウで次のコマンドを使用しました。実行時に引数をテキストファイルとしてperlスクリプトに渡す方法

D:>xyz.prl < input.txt 

しかし、input.txtファイルから値を取り出し、最初の値を求めることによって無限ループに入ることはありません。

私がxyz.prlだけを与えると、入力値を求めています。私が手動で与えた値を受け入れる。

実際には、VC++(MFC)ダイアログベースのアプリケーションを開発し、windowsXPを使用する必要があります。私はこのxyz.prlを実行するためにシステムコマンドを使用する必要があり、すべての引数をテキストファイル(input.txt)として渡す必要があります。私は、xyz.prlが非常に安全なファイルであり、コードを共有できないことをご報告いただき、大変ご迷惑をおかけして申し訳ありません。

コマンドプロンプトで直接xyz.prlを入力すると、入力値を1つずつ尋ねてきます。しかし、システムコールを使って私はそのような値を送ることはできません。

私は全く新しいperlです。だから私にシステムコマンドに渡さなければならないコマンドを教えてください。

おかげで、

Segu おかげINPUT.TXTがパラメータとして渡されることはありませんのでです Segu

+0

はおそらく、あなたは私たちにいくつかのコードを示すことができましたか? – TLP

+1

これは、ブロックと呼ばれ、無限ループではありません。無限ループはCPU時間を消費し、ブロックはブロックしません。 –

答えて

1

- それはストリームとしてアクセスできるようになります。それはシェルのリダイレクトxyz.pl < 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

です下の例では、私はあなたが<STDIN>かを読み取ることができSTDINを通して、ファイルからの入力を与えていると考えていますダイヤモンドオペレーター<>

ただし、ファイルからデータを読み込むための一般的な方法は次のとおりです。

用途:

$ xyz.pl input.txt 

コード:

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

while (<>) { 
    # $_ variable contains each line from the file 
} 
関連する問題