前回の続き
for 文がダサいとか言いながら、配列の初期化にこんなのを使ってた。
1
2
3
4
| my @list = ();
for(my $i = 0; $i < 100; ++$i){
push @list, $i;
}
|
これは、perl の範囲演算子で何とかなった。
1
2
3
4
5
| use strict;
use warnings;
my @list = (0 .. 100);
print $_ . "\n" for @list;
|
ということで、fizzbuzz 書き直し
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| use strict;
use warnings;
my @list = (0 .. 100);
my @fizzbuzz = map {
if(0 == ($_ % 3) && 0 == ($_ % 5)){
"FizzBuzz"
} elsif (0 == ($_ % 3)){
"Fizz"
} elsif (0 == ($_ % 5)){
"Buzz"
} else {
$_
}
} @list;
print $_ . "\n" for @fizzbuzz;
|
ということは、更に短くできそう
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| use strict;
use warnings;
print $_ . "\n" for map {
if(0 == ($_ % 3) && 0 == ($_ % 5)){
"FizzBuzz"
} elsif (0 == ($_ % 3)){
"Fizz"
} elsif (0 == ($_ % 5)){
"Buzz"
} else {
$_
}
} (0 .. 100);
|
おお。
後置 for で map が扱えるとか。ちゃんとした言語だ。
ということで、変数が $_
だけになったのが良くなってきた感じ。
FizzBuzz はこのくらにして、次へ