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?
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
.
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.
Tags und Links perl stdin activeperl