perl - 为什么 STDIN 会导致我的 Perl 程序卡住?

标签 perl stdin activeperl

我正在学习 Perl,并编写了这个脚本来练习使用 STDIN。当我运行脚本时,它仅在控制台上显示第一个打印语句。无论我输入什么(包括新行),控制台都不会显示下一个打印语句。 (我在 Windows 机器上使用 ActivePerl。)它看起来像这样:

$perl script.pl
What is the exchange rate? 90.45
[Cursor stays here]

This is my script:

#!/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";

我在研究问题时注意到的一个潜在解决方案是我可以包括

use IO::Handle;
flush STDIN; flush STDOUT;
在我的脚本中。不过,这些行并没有解决我的问题。

我应该怎么做才能让 STDIN 正常工作?如果这是正常行为,我错过了什么?

最佳答案

当你这样做时

my @answer = <STDIN>;

...Perl 等待 EOF 字符(在 Unix 和类 Unix 上是 Ctrl-D)。然后,您输入的每一行(由换行符分隔)都会进入列表。

如果您这样做:

my $answer = <STDIN>;

...Perl 等待换行,然后将您输入的字符串放入 $answer 中。

关于perl - 为什么 STDIN 会导致我的 Perl 程序卡住?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3918679/

相关文章:

perl - WMI 查询返回不完整的结果

c - Scanf 字符串空间问题 C

perl - 从 activeperl 迁移到草莓 perl

java - 如何停止使用 Scanner 从 stdin 读取多行?

c++ - 停止所有 C++ 线程

windows - Perl 包问题

perl - Perl中赋值运算符的结果列表评估不一致?

perl - "Can' t 修改非左值子程序调用"当从方法中添加 Moose 属性时

mysql - 如何在 JSON 数组中创建 JSON 数组

perl - 使用 Perl 通过 G Suite 发送电子邮件