Warum lässt STDIN mein Perl-Programm einfrieren?

7

Ich lerne Perl und schrieb dieses Skript, um mit STDIN zu üben. Wenn ich das Skript ausführe, wird nur die erste Druckanweisung auf der Konsole angezeigt. Egal, was ich eintippe, einschließlich neuer Zeilen, die Konsole zeigt die nächste Druckanweisung nicht an. (Ich verwende ActivePerl auf einer Windows-Maschine.) Es sieht so aus:

%Vor%

Das ist mein Skript:

%Vor%

Eine mögliche Lösung, die mir bei der Untersuchung meines Problems aufgefallen ist, ist, dass ich

einbeziehen könnte
$perl script.pl
What is the exchange rate? 90.45
[Cursor stays here]
und
#!/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";
in meinem Skript. Diese Zeilen haben mein Problem jedoch nicht gelöst.

Was soll ich tun, damit sich STDIN normal verhält? Wenn das normale Verhalten ist, was fehlt mir?

    
Kevin 12.10.2010, 20:21
quelle

4 Antworten

18

Wenn Sie

tun %Vor%

... Perl wartet auf das Zeichen EOF (auf Unix und Unix - wie es Ctrl-D ist). Dann wird jede eingegebene Zeile (getrennt durch Zeilenumbrüche) in die Liste aufgenommen.

Wenn Sie stattdessen tun:

%Vor%

... Perl wartet auf einen Zeilenvorschub und setzt die eingegebene Zeichenfolge in $answer .

    
CanSpice 12.10.2010, 20:26
quelle
5

Ich habe mein Problem gefunden. Ich habe den falschen Variablentyp verwendet. Anstatt zu schreiben:

%Vor%

Ich hätte verwenden sollen:

%Vor%

mit einem $ anstelle eines @.

    
Kevin 12.10.2010 20:33
quelle
4

Um die mehrzeilige Eingabe zu beenden, können Sie unter Windows Control-D unter Unix oder Control-Z verwenden.

Sie wollten jedoch wahrscheinlich nur eine einzige Eingabezeile, also sollten Sie einen Skalar wie andere erwähnte Personen verwenden. Learning Perl führt Sie durch diese Art von Sachen.

    
brian d foy 12.10.2010 23:59
quelle
-3

Sie könnten versuchen, Autoflush zu aktivieren.

Entweder

%Vor%

oder

%Vor%

Deshalb sehen Sie die Ausgabe nicht gedruckt.

Außerdem müssen Sie von Arrays '@' in skalare Variablen '$'

wechseln %Vor%     
krico 12.10.2010 20:24
quelle

Tags und Links