teratail header banner
teratail header banner
質問するログイン新規登録
Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

Q&A

解決済

2回答

4837閲覧

Perlの<STDIN>にて複数行(改行を含んだ)入力の受け取り方

hogehoge123456

総合スコア10

Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

0グッド

0クリップ

投稿2016/07/04 08:01

0

0

ってズバリどのように処理すれば良いんでしょう
具体的にはメッセージを受け取りたいと考えてます

あなたの自己紹介をしてください

のような<STDIN>に対し入力をするわけですが、

my $msg = <STDIN>; chomp($msg);

のように受け取っても一行だけしか受け取れ無いのは当たり前で

教えて欲しいっす....

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

これでも良いでしょうか?
while (my $msg = <STDIN>) {
chomp($msg);
print $msg ."\n";
}

投稿2016/07/04 08:31

A.Ichi

総合スコア4070

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hogehoge123456

2016/07/04 08:55

解答ありがとうございます このコードで入力を終えて一度whileを終了させて次の<STDIN>に移動したい時ってどうしますか? 調べによるとWindowsのCMDではctrl+Zでループを中断出来るとのことですが無理でした、、質問外なのでご存知ではないならばよろしいのですが
A.Ichi

2016/07/13 01:55

stdinに関してredirectは調べましたが出来ない様です。コンソールからの入力の視点からすると戻りは出来ない様な気がします。 CTRL-Cの割り込みはシグナルを追加する事で可能になります。 $SIG{INT} = sub { warn "割り込み"; };
guest

0

複数行をまとめて1変数に入れたい(改行文字を無視したい)ということであれば、

Perl

1$/ = ""; 2my $msg = <STDIN>;

です。$/が区切り文字を表します。

そうじゃなくて、1行ずつ順番に処理したいと言うことなら、whileを使います。

投稿2016/07/04 08:26

otn

総合スコア86349

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hogehoge123456

2016/07/04 08:56

解答ありがとうございます 区切り文字は知りませんでした。調べようと思います
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問