6.6 練習問題2

2. 文字列のリストを1行に1個ずつ別々に読み込んで、その文字列を20文字幅のカラムに右寄せで表示するプログラムを書いてください。出力が正しいカラムにあっていることを確認するために、目盛り付きの「物差し」も出力してください。
誤って19カラムで出力しないように注意しましょう。

19カラムで出力しないように注意しましょう、と書かれているのに案の定間違う。ショートカット構文にはchompは含まれていないことが身に染みてわかったので、いい反面教師になった。

書いたコードはこちら。

print "123456789012345678901234567890\n";

while (<>){
    chomp;
    printf "%20s\n", $_;
}

出力結果はこちら。


123456789012345678901234567890
perl
perl
ruby
ruby
php
php
^Z

む、練習問題中の出力イメージと全然違う!
少し考えて、

print "表\示したい文字列を入力してください。入力はCtrl-Zキーで終了します。\n";
chomp (my @chars = <STDIN>);
print "123456789012345678901234567890\n";

foreach (@chars){
    printf "%20s\n" , $_;
}

メッセージ出力処理を加えて以上のコードで実行。結果は、


表示したい文字列を入力してください。入力はCtrl-Zキーで終了します。
perl
ruby
php
^Z
123456789012345678901234567890
perl
ruby
php
以上のようになりました。OK!