僕のYak Shavingは終わらない

車輪の再発明をやめたらそこには壮大なYakの群れが

続・初めてのPerl第2章を読んだり

実行可能なブログ

#!/home/xxxxxxx/perl5/perlbrew/perls/perl-5.10.1/bin/perl
use strict;
use warnings;
use 5.010;
use Data::Dump qw/dump/;
# 続・初めてのPrelを読む

# 第2章 中級者の基礎知識(を読みながら勝手に思いついたコードを書く)
# 2011/12/02

# printはリストを扱う演算子
# 下をリストだと思っているかどうか?
print "私は", "今から", "続・初めてのPerlを読みます。\n";
# 結果は同じだけれど
print "私は"."今から"."続・初めてのPerlを読みます。\n";

# grepでフィルタリング。リストを貰ってテスト式を通過したものを出力
# リストで受け取るなら通過したものだけを配列へ。
# スカラーで受け取るなら通過した個数を出力。
my @list = qw# hoge fuga piyo #;
my @word_g = grep /g/, @list; # -> hoge fuga
my $count = grep /g/, @list; # -> a

# ただ単にループ
grep say, @list;
map say, @list;
say for @list;

# ひっくり返してみた
say map $_, @list;
say grep $_, @list;
say for @list; # forだけ結果が違うのはな〜んでだ?

# 奇数だけ出力
say grep $_%2, 1..10;
# 偶数だけ出力
say grep !($_%2), 1..10;


@list = (1, 2, 4, 8, 'hoge', 12, 15, 'fuga', 32);
say grep /\d/, @list; # 数字だけを出力
say grep /[^\d]/, @list; # 数字以外を出力

# 素数だけ出力(grepでブロック式を使用)
my @prime = grep {
    my $num = $_;
    my $count = 0;
    map {$num % $_ ? 0 : $count++ } 1..$num;
    $count == 2 ;
} 1..100;
say "@prime";

# 3の倍数の時だけあほになる                                                                                        say map {$_% 3 ? " $_" : " あほ" } 1..100;                                                                                                                                                                                            # 3の倍数のkeyのときだけvalueをあほにする
my %aho =  map { $_ , $_ % 3 ? "あほじゃない" : "あほ" } 1..100;
say "$_ : $aho{$_}" for sort {$a <=> $b} keys %aho;