Perlサンプル2 文字入力
投稿:2019-08-19
キーボードから入力を受け付けて表示します。
#!/usr/bin/env perl
use v5.26;
use utf8;
use strict;
use warnings;
use Encode::Locale;
use open IO => ":utf8";
binmode STDIN, ":encoding(console_in)";
binmode STDOUT, ":encoding(console_out)";
$| = 1;
my $howtoterm = "MSWin32" eq $^O ? "CTRL+zと改行で終了" : "CTRL-dで終了";
say "自分の好きな者を入力してください($howtoterm)";
my $count = 0;
while (<>) {
chomp;
$count++;
my $wa = $count % 2 ? "は" : "も";
say "$_${wa}俺の嫁";
}
Windowsの実行結果です。 Linuxは「CTRL+dで終了」です。
自分の好きな者を入力してください(CTRL+zと改行で終了) たこルカ たこルカは俺の嫁 ルカ姐さん ルカ姐さんも俺の嫁 結月ゆかり 結月ゆかりは俺の嫁 ミクダヨー ミクダヨーも俺の嫁 ^Z
$^O
「この Perl が構築されたオペレーティングシステムの名前です」
「Windows プラットフォームでは、$^O はあまり役に立ちません: これは常に MSWin32 となり、95/98/ME/NT/2000/XP/CE/.NET の違いを示していないからです。」
Perlの組み込み変数 $^O の翻訳 - perldoc.jp
<>
入力した文字を1行ごとに取り出します。
入力が終わる(CTRL+zと改行、又は、CTRL+d)とwhileループが終了します。
入力行は改行も含めて$_に入ります。
この改行は、OSに依存する改行(例えばWindowsなら0x0d, 0x0a、Linuxなら0x0a)からPerlの改行(0x0a)に変換されています。
「I/O 演算子」
「<> からの入力は、標準入力からか、コマンドライン上に並べられた個々の ファイルから行なわれます。」
「この入力シンボルが、while 文(for(;;) の形になっていたとしても)の条件式中に 単独で現れた場合だけは、その値が自動的にグローバル変数 $_ に代入されます」
perlop - Perl の演算子と優先順位 - perldoc.jp
chomp
$_の末尾にある改行を削除します。
「入力レコードから、改行を削除したいのだけれど、最後のレコードには改行が 入っているのかわからないような場合に、使用できます。」
「VARIABLE が省略されると、$_ を対象として chomp します。」
Perlの組み込み関数 chomp の翻訳 - perldoc.jp
"$_${wa}俺の嫁"
変数$_と$waをダブルクォーテーションのリテラル文字列の中に入れると展開します。
但し変数名に漢字も使えるので"$_$wa俺の嫁"では変数名が「$wa俺の嫁」になり未定義の変数を展開したと警告されます。
$waは${wa}と書けますから"$_${wa}俺の嫁"で$waが展開されます。
「クォートとクォート風の演算子」
perlop - Perl の演算子と優先順位 - perldoc.jp