Perl(2)

5章 ハッシュ
 $hash{$some_key}
 5.2.1ハッシュ全体を扱う
  %some_hash = {"foo",35,"bar",12.4,2.5,"hello","wilma",1.72e30,"betty","bye\n");
  @any = %some_hash; ハッシュをほどく。順番に並ぶと限らない。
  %inverse_hash = reverse %any_hasy; キーと値のペアをひっくり返す
  my %last_name = (
   "fred" => "flintstone",
   "dino" => undef,
   "barney" => "rubble",
   "betty" => "rubble", #p94 ,いるの?
  };
  keys関数とvalues関数
   my @k = keys %hash;
   my @v = values %hash;
  each関数 ハッシュ全体に対して繰り返し行いたい場合
   while ( ($key,$value) = each %hash ) {
    print "$key => $value\n";
   }
  
  foreach $key (sort keys %hash){
    ...
  }

  ハッシュの要素の真偽
   $books{"barney"} = 0;
   $books{"pebbles"} = undef;
  exists関数 キーが存在するか?   
   if (exists $books{"dino"}){
     print "Hey\n";
   }
  delete関数
   delete $books{$person};
  p100 ハッシュの要素を変数展開する ??

  p101演習 結果異なる。
  print "$name'firstname is $friend_name{$name}\.\n";
  print "$name\'firstname is $friend_name{$name}\.\n";

  <> とかの使い方が自由にできること!!
  p101の2の演習はみどころがある。

6章 入出力の基本
   chomp($line = );
   while (defined($line = )){
    ...
   }
   while (){
    print "I saw $_";
   }
   while (defined($_ = )){
    print "I saw $_";
   }
   入力した行は、$_に格納される。whileループの条件部に行入力演算子を単独
   でつかった場合のみ有効。
   foreach (){
    print "I saw $_";
   }
   whileとforeachで動作が同じに見える。
   しかし、foreachはリスト要求するのでメモリに注意。

    whileの結果
    %>111
    %>I saw 111
    %>222
    %>I saw 222
    %>333
    %>I saw 333
    %>444
    %>I saw 444

   6.2 ダイヤモンド演算子からの入力
    起動引数
    %> ./my_program fred barney betty

    while (<>){
     chomp;
     print "It was $_ that I saw!\n";
    }
    @ARGVに起動引数のリストがセットされている
    
    printfによるフォーマット付出力
    printf "%g %g %d %6d %2d %10s %-15s%12.3f

    %記号を表す場合は、 %%

    chomp(my $width = );
    printf "%${width}s\n",$_;
7章 正規表現の基本
  7.2.1 メタキャラク
   . 一文字ワイルドカード
  7.2.2 量指定子
   * 直前のものに0回以上
   + 直前のものに1回以上
   ? 直前のものに 0,1回
  7.2.3 グループ
   /(fred)+/ fredfredfred
  7.2.4 選択肢
   |  /fred (and|or) barney/

  逆スラッシュエスケープが使える。(ダブルQuote扱い)
  \を表す場合は、\\ とする。
  
  while(<>){
   chomp;
   if(/pattern/){
    print "Matched: |$`<$&>$'|\n";
   } else{
    print "No match.\n";
    }
   }

8章 正規表現の詳細(p125-)
  文字クラス 1対の[]の間に文字をならべたもの
  [abcwxyz] [a-cw-z]
  [^def] d,e,f以外
  \d [0-9]
  \w [A-Za-z0-9_]
  \s [\f\t\n\r ]
 8.2 汎用の量指定子
  /a{5,15}/  aを5から15繰り返したものにマッチ
  * は、{0,}と同じ。
  文字列の先頭 ^ キャレットアンカー
  文字列の末尾 $ ドル記号アンカー
 8.3.1 ワードアンカ−
  ワード境界アンカー  \b ワードの両側にマッチ
  非ワード境界アンカー \B
 8.4.1 後方参照
  /(.)\1/ \1には、最初の括弧のペアにマッチした部分が格納
 8.4.2 メモリ変数
   $1  パターンマッチが終了した時点で使える。\1との違い?
 8.5 優先順位
   詳細がよくわからん。省略
 .とマッチさせる場合は、/\./
 ['"] p131 文字クラス内は、\は関係ないようだ
 $とマッチさせる場合は、 /\$/
9章 正規表現の利用法
  m// m{} m^^ など
  "http://"にマッチさせるために /^http:\/\// →m%http://%
  //i 大文字小文字を区別しない。
  //s  あらゆる文字にマッチ。改行も
 9.3 結合演算子 =~
    defaultは、$_に対して作用するが。。