blog20100901

2013/08/20 - プログラミング言語 Perl にまつわる etc. - Perl monger
参考 : perldoc, perldoc.jp, search.cpan.org, perldoc.perl.org ...
「 初めての Perl 第 6 版 」(オライリー・ジャパン発行 ISBN978-4-87311-567-2) 」
「 続・初めての Perl 改訂版 」(オライリー・ジャパン発行 ISBN4-87311-305-9) 」
「 Effective Perl 第 2 版 」(翔泳社発行 ISBN978-4-7981-3981-4) 」 ... etc,.

Perl Perl_0

Perl 「 STDIN 」でキーボードから入力を受け付ける それと chomp 演算子 (0x16)

Perl 「 STDIN 」でキーボードから入力を受け付ける それと chomp 演算子 (0x16)

Perl について、復習を兼ねて断片的な情報を掲載して行く連載その 0x16 回。

Perl でキーボードから入力を受け付ける方法と、その入力情報から改行文字を取り除く chomp 演算子について。





とりあえず <STDIN> を使ってキーボードの入力を受け付けてみる



Perl の <STDIN> (実際は行入力演算子 <> とファイルハンドル STDIN の組み合わせです) は行入力演算子です。

Perl 標準出力と print 関数の序 (0x03) 」で少し説明した様に、STDIN は STanDard INput (標準入力) を意味します。

Standard Input は通常あなたのキーボードが指定されています。

<STDIN> をソースコード (の文脈 = コンテキスト) 上で、スカラ値が期待された場所に使うと、Perl は Standard Input から 1 行 (入力開始から改行文字まで) 読み込んで <STDIN> の値として返します。

具体的には次の様になります。

Perl のプログラムが実行され、その処理が <STDIN> にたどり着くと、Perl はプログラムを停止して、システムに入力待ち受けの処理を渡します。

システムは、Standard Input (標準入力) からの入力を受け取りつつ、改行文字の入力を待ちます。

STDIN で改行文字が入力されると、システムは、その入力情報を Perl に返すので、Perl は <STDIN> 以下の処理を再開します。

この場合 (<STDIN> を使った場合 ?)、システムから返された入力情報には必ず改行文字 (\n) が含まれていますので、6 行目の print で表示する文字列では改行文字が省かれています。


$line = <STDIN>; # シジル $ でスカラ値が期待されている

if ($line eq "\n") { # 入力行が改行文字 \n だけの場合に 真
print "Blank line.\n"; # 改行文字だけが入力された場合
} else {
print "Input was $line"; # 文字列の入力があった場合
}



chomp 演算子



僕は チョンプ と読んでいます。

chomp 演算子は、変数に入った文字列の末尾に改行文字があった場合にそれを取り除きます。

例えば前出のプログラムに chomp を加えると次の様になります。


$line = <STDIN>;

chomp ($line);

if ($line eq "\n") {
print "Blank line.\n";
} else {
print "Input was $line\n"; # 改行文字を追加する
}


1 行目から 3 行目では、「<STDIN> で $line に読み込んだ文字列」から「chomp を使って改行文字を取り除く」という 2 ステップの処理を行っています。

chomp によって $line の末尾にあるはずの改行文字が取り除かれるため、8 行目の文字列に改行文字 \n を追加してあります。

chomp を使う際には別の書き方も出来ます。


chomp ($line = <STDIN>);


これは、上記 2 ステップの処理を 1 ステップの処理にまとめているものです。

多くの Perl プログラマは出来るだけシンプルに書くことを好むらしいので、1 ステップ処理の書き方に慣れておいた方が良いとのことです。


0x16-> 0x17 へ



Perl About (0x01)」に書きましたが、Perl のソースコードを初めて見た時に、chomp は謎めいた存在でした。お前はいったい何をしているんだぜ ? と。


chomp;


改行文字を取り除くと言ったってあなた、「何の」という情報が欠落していますよね。などと、$_ の存在も、コンテキストの重要性も知らない僕はひとり右往左往していたものです。

次回は chomp の補足します。

参考情報は以下の書籍を中心に Wikipedia および各 Web サイト。それと詳しい先輩。

参考 :「Randal L. Schwartz, brian d foy, Tom Phoenix 共著 近藤 嘉雪 訳「初めての Perl 第 6 版」(オライリー・ジャパン発行 ISBN978-4-87311-567-2)」

次回 (0x17) へ続く。

過去記事 RSS










同じカテゴリー(Perl)の記事
 Perl mp2 翻訳 Web コンテンツ圧縮の FAQ (d228) (2023-10-11 23:49)
 Perl mp2 翻訳 既知のブラウザのバグの回避策をいくつか (d227) (2023-05-26 15:41)
 Perl mp2 翻訳 Perl と Apache でのキュートなトリック (d226) (2023-05-19 17:05)
 Perl mp2 翻訳 テンプレートシステムの選択 (d225) (2022-08-15 22:23)
 Perl mp2 翻訳 大規模 E コマースサイトの構築 (d224) (2022-06-15 20:43)
 Perl mp2 翻訳 チュートリアル (d223) (2022-06-15 20:42)
上の画像に書かれている文字を入力して下さい
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。

Llama
リャマ
TI-DA
てぃーだブログ
プロフィール
セラ (perlackline)
セラ (perlackline)
QRコード
QRCODE
オーナーへメッセージ

PAGE TOP ▲