初めてのPerl 第6章

練習問題をメモ。

ex06-1
#!/usr/bin/perl
use strict;

print reverse <>;
ex06-2
#!/usr/bin/perl
use strict;

## 1行づつ読むバージョン
#print ((0..9) x 2, "\n");
# while (<>) {
#     chomp;
#     printf "%20s\n", $_;
# }

## 一気読みバージョン
chomp(my @lines = <>);
print ((0..9) x 2, "\n");
foreach (@lines) {
    printf "%20s\n", $_;
}
ex06-3
#!/usr/bin/perl
use strict;

# ## 1行づつ読むバージョン
# print "Enter a column width: ";
# chomp(my $column = <STDIN>);
# print ((0..9) x (($column+9)/10), "\n");
# while (<>) {
#     chomp;
#     printf "%${column}s\n", $_;
# }

## 一気読みバージョン
print "Enter a column width: ";
chomp(my $column = <STDIN>);
chomp(my @lines = <>);

# 正しいものさし
print ((0..9) x (($column+9)/10), "\n");

# 間違ったものさし
# if ($column >= 10) {
#     print ((0..9) x ($column / 10), "\n");
# } else {
#     print ((0..9), "\n");
# }

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

反省点

最初、ex06-1 で入力行を chomp しなかったので、改行文字分の空白文字が表示されてしまった。
ものさしを指定した長さで表示する問題は、0から1、10から11などの境界値を意識すると考えやすいのかもしれない。