6.6 練習問題3

3. 問題2のプログラムを改造して、ユーザがカラムの幅を指定できるようにしてください。

よしきた。書いたコードはこちら。

print"入力された文字を、入力された列幅に右寄せで表\示するプログラムです。\n";

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

my $flag = 0;
my $columns;
while ($flag == 0){
    print "列幅を入力してください(半角英数)。\n";
    chomp($columns = <STDIN>);
    if (0 < $columns){
	$flag = 1;
    }else{
	print "列幅には1以上の数を入力してください。\n";
    }
}

print "1234567890" x ($columns/10 + 1), "\n";
foreach (@chars){
    printf "%$columnss\n", $_;
}


留意点は、

    printf "%${colums}s\n", $_;

この部分です。ブレースをデリミタとして変数名を囲まないと、
%$columnss\nとなり、インタプリタ

Global symbol "$columnss" requires explicit package name
というエラーを吐いてしまいます。変数columnssと認識してしまうのですね。


出力結果はこちらです。


入力された文字を、入力された列幅に右寄せで表示するプログラムです。
表示したい文字を入力してください(半角英数)。
入力はCtrl-Zキーで終了します。
Perl
Ruby
PHP
^Z
列幅を入力してください(半角英数)。
10
12345678901234567890
Perl
Ruby
PHP

よしよし。


7章以後は正規表現を取り扱うので、これからは1章から6章までざっと問題文の復習&チェックしていきます。