My First Perl #2

前回の続き

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 はこのくらにして、次へ