sironekotoroの日記

Perl で楽をしたい

独習Perl 第2版 第3章,4章

ひさびさのPerl

  • 帰省やら旅行やらでMac触るのも久々という。
  • 帰省時にはもちろんMac持っていきましたが、iPhone,iPadの充電機代わりにしか使わなかった
    • ひどい

独習Perl

  • 前回で飽きそう・・・ってことでしたが、練習問題なんかはまだやりがいが多く、発見もある。
  • とりあえず、一冊終える事を目標に、例題メインで進める事に。

独習Perl 第2版 第3章 制御構文

  • for文とwhile文
    • forステートメントの初期値,条件式,インクリメント式は同一の変数でなくてもokってのは新鮮だった。
    • ラベルやnext,redo,lastってのがいまいち使う場面が想定できない。

独習Perl 第2版 第4章 配列

  • for,foreachで配列を扱うループまわした時、配列そのものにも影響していた事を知り驚く。
my @numbers = (0..3);
foreach my $value (@numbers){
    $value *= 2;
}
print "@numbers\n";
  • @numbersに格納された0,1,2,3という数は、foreachまわすと0,2,4,6になる。
    • 最初は、@numbersから数を取り出したら、@numbersが空配列になるのでは?とか思ってた
      • popみたいに思ってたってことか
    • むしろ、配列の個々の要素にアクセスできるってことは、mapみたいに使えるってことか
  • 配列など既に通り過ぎた地、余裕とか思ってたが、こうやって理解の浅さを知る

  • ハッシュが配列の一種としてまとめて解説されている。

    • 今までの本だと、変数で一つ、配列で一つ、ハッシュで一つ、みたいな解説の方法が多かったなぁ。
  • 100までの数で、2,3,5で割り切れる数をカウントする。
    • このハッシュを使って配列の中の特定要素(今回は特定の数で割り切れる)をカウントする方法って、最初に知ったときはホント目から鱗だったなあ。
my %num;
foreach ( 1 .. 100 ) {
    $num{2}++ if ( $_ % 2 == 0 );
    $num{3}++ if ( $_ % 3 == 0 );
    $num{5}++ if ( $_ % 5 == 0 );
}

foreach ( 2, 3, 5 ) {
    print $num{$_}, "\n";
}

  • ハッシュ扱うときの、eachっての初めて使った。なるほど、keyとvalueのペアで抜き出す事も出来るんか
my $value;
my $key;
while (($key ,$value) = each %array){
    print $key ," ",$value ,"\n";
}