7

私は Perl を学んでおり、STDIN の使用を練習するためにこのスクリプトを書きました。スクリプトを実行すると、コンソールに最初の print ステートメントだけが表示されます。改行を含めて何を入力しても、コンソールには次の印刷ステートメントが表示されません。(私は Windows マシンで ActivePerl を使用しています。) 次のようになります。

$perl script.pl
為替レートは?90.45
[カーソルはここにとどまる]

これは私のスクリプトです:

#!/user/bin/perl
use warnings; use strict;

print "What is the exchange rate? ";
my @exchangeRate = <STDIN>;
chomp(@exchangeRate);

print "What is the value you would like to convert? ";
chomp(my @otherCurrency = <STDIN>);

my @result = @otherCurrency / @exchangeRate;
print "The result is @{result}.\n";

私の問題を調査しているときに気付いた1つの潜在的な解決策は、含めることができるということです

IO::Handle を使用します。
STDIN をフラッシュします。STDOUT をフラッシュします。
私のスクリプトで。ただし、これらの行は私の問題を解決しませんでした。

STDIN を正常に動作させるにはどうすればよいですか? これが正常な動作である場合、何が欠けていますか?

4

4 に答える 4

18

あなたがするとき

my @answer = <STDIN>;

... PerlはEOF文字を待ちます(UnixおよびUnixの場合-Ctrl-Dのように)。次に、入力した各行(改行で区切られた)がリストに追加されます。

代わりに行う場合:

my $answer = <STDIN>;

... Perlは改行を待ってから、入力した文字列を。に入れ$answerます。

于 2010-10-12T20:26:53.310 に答える
5

私は自分の問題を見つけました。間違ったタイプの変数を使用していました。書く代わりに:

my @exchangeRate = <STDIN>;

私は使うべきだった:

my $exchangeRate = <STDIN>;

@の代わりに$を使用します。

于 2010-10-12T20:33:12.997 に答える
4

複数行の入力を終了するには、UnixではControl-Dを、WindowsではControl-Zを使用できます。

ただし、おそらく1行の入力が必要なだけなので、他の人が言及したようにスカラーを使用する必要があります。Perlを学ぶことで、この種のことを順を追って説明します。

于 2010-10-12T23:59:13.160 に答える
-3

自動フラッシュを有効にしてみてください。

また

use IO::Handle;
STDOUT->autoflush(1);

また

$| = 1;

そのため、出力が印刷されません。

また、配列「@」からスカラー変数「$」に変更する必要があります

$val = <STDIN>;
chomp($val);
于 2010-10-12T20:24:08.573 に答える