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は、$_に対して作用するが。。

Perl(1)

http://www.cpan.org/
http://kobesearch.cpan.org/

  • Support

http://www.pm.org
http://www.perlmonks.org

  • 1章

 @lines = `perldoc -u -f atan2`;  実行できず。チェック要。
 foreach (@lines){
  s/\w<([^>]+)>/\U$1/g;
  print;
 }
練習問題1-6へ

 整数リテラル 61_298_040 下線_をはさんで読みやすく出来る
 8進数 0377 :0をつける。
 シングルquote文字列: 'Don\'t' \'を使う。
 ダブルquote文字列: 逆スラッシュエスケープ まとめること。
  \" \\ とかで " 、\ を表現できる。
 文字列演算子
  連結(.演算子)    "hello" . "world"
  文字列繰り返し演算子  "fred" x 3 #fredfredfred
               5 x 4 # 5 * 4 でない
 組み込みの警告メッセージ
 %> perl -w my_program
 #!/usr/bin/perl -w
 レキシカル警告 バージョン5.6 -wよりもきめ細かな設定ができる
 2項代入演算子
  $fred +=5;
  $barney *= 3;
  $str .= " ";
 printによる出力(2.5.4)
  print "The answer is ", 6 * 7,".\n";
  コンマを区切って、printに複数の値を渡すことが出来る。(リストと呼ばれる)
 ダブルquote展開
  $what = "steak";
  print "fred ate ${what}s.\n";
 演算子の優先順位と結合(2.5.6)
 比較演算子
  数値演算子  == != < > <= >=
  文字列演算子 eq ne lt gt le ge
 if制御構造
  if(...) {
  }else{
  }
 ブール値
  undef :偽
  数値0 :偽 それ以外真
  空文字列('') 偽 それ以外真
  但し、'0' ゼロの文字列は、偽。数値と同じ。
 標準入力
   キーボードから値を入力(行入力演算子、改行文字まで)
 chomp演算子
  chomp($text = ); #テキストを読み込む。末尾の改行は削除
 while制御構造
  while ($count < 10) {
   ...
  }
 defined関数
  undefであって、空文字ではないことを確かめるために使う。引数がundefなら偽を返す。

  • 3章 リストと配列

  配列の最後の要素 rocksという配列の最後の要素のindexは、$#rocks
   (1,2,3)
   (1..100)# 100個の整数のリスト 範囲演算子 ..
   ($a..$b) #変数で定義するのもあり。
 qwショートカット
  qw/ fred barney betty wilma dino /
  シングルquoteで囲まれた文字列と見なすため、\n $fredは使えない。
  任意のデリミタ
   qw! fred barney betty !
   qw( ) qw{ } 
  qw! yahoo\! google excite !
  qw{
    /usr/dict/words
    /home/rootbeer/ .ispell_english
   }
  @stuff = (@giant,undef,@giant);  明示的にundefを挿入
 pop演算子とpush演算子
  @array = 5..9;
  $fred = pop(@array);
  $barney = pop @array;
  push(@array, 0);
  push @array,1..10;
  後ろの要素に作用する。
 shift演算子とunshift演算子
  @array = qw# dino fred barney #;
  $a = shift(@array); # fred barney
  unshift(@array,5)
  前の要素に作用する
 配列を文字列の中に展開する
  @rocks =qw{ flintstone state rubble };
  print "quarts @rocks limestone\n";
  自動的に間にスペースをいれて展開される。しかしダブルquoteしないとスペースが入らない。
  @varは、ダブルquoteで展開されるので展開されたくない場合は、\@とすること
  "this is ${fred}[3]\n"; # @fred でなく、$fredを表示させたい場合
  "this is $fred\[3]\n";
 foreach制御構造
  foreach $rock (qw/ bedrock slate lava /){
    print "One rock is $rock.\n";
  }
  foreach(1..10){
   print "I can count to $_!\n";
  }
   # $_が制御変数として使える。
 reverse演算子
  @fred = 6..10;
  @barney = reverse(@fred);
  @wilma = reverse 6..10;
 sort演算子
  @sorted = sort(@rocks);
 スカラーコンテキストとリストコンテキスト
  sort something # somethingはリストで無いと駄目
  リストを生成する式をスカラーコンテキストで使う p62
  スカラーを生成する式をリストコンテキストで使う p63
   @wilma = undef; # undef の要素が得られた
   @betty = (); #配列を空にする正しい方法
  スカラーコンテキストを強制
    print "I have ", scalar @rocks, "rocks!\n"; #数を表示する
 リストコンテキストでを使う
   chomp(@lines = ); #行をすべて読み込む、但し改行文字は除く
 print @val; をチェックすること!

  • 4章

 sub sum_of_fred_and_barney{
  print "Hey, you called the sum_of_fred_and_barney subroutine!\n";
  $fred + $ barney; # これが戻り値になる
 }
 サブルーチンを起動する
  &marine;
  $c = &sum_of_fred_and_barney;
 サブルーチンの引数は、自動的に @_に格納される。
 また、最初の引数は、$_[0], $_[1]など
 @_は、サブルーチン起動の度に新しいものが生成される。
 レキシカル変数: my
  my($a,$b) = @_;
 local演算子
  local($a,$b) = @_;
 my と localの相違(p76)
 可変長のパラメータリスト
  sub max{
   if (@_ !=2) {
      print "Warning...
}
 use strict;
 return演算子

天のシナリオを読んで

「天のシナリオ」の読み方―人知を超えて動く「経済」と「時代」

「天のシナリオ」の読み方―人知を超えて動く「経済」と「時代」

藤原直哉氏の本。天のシナリオという概念を持ち出している。前書の予測があやしくなったので出版したのでは? と意地悪く思ってしまう。
http://www.fujiwaraoffice.co.jp/top_jp.html
最近は、人間による予測の限界を感じさせる「不連続の時代」になっており、人知を超えた世界と時代の筋書きを「天のシナリオ」と著者は定義しています。
結局、「天のシナリオ」では、世界戦略といった大きな戦略で動くべきでないこと主張。従来のピラミッド型の縦構造から横構造に変わっていくことを示唆している。日本のたつ基盤として、お家芸と言われた製造業は、もちろんあるが競争の激しい縦構造より、観光と農業に力を入れたほうがいいと予想。
覇権主義に捉われている国々は共倒れするしかない時代となっている。ここに日本の道であると示せるようなものが登場できれば。と

  • ヨーロッパとアジアを結ぶユーラシアのはじまり(機軸通貨は、ドルからユーロへ)
  • エネルギーは、「戦国時代」の到来を予定して読め(原油に代わる新しいEnergy)
  • 日本の政治は「草の根」情報公開を頭にいれて読め(御用達経済へ−共存共栄社会)
  • 農業と観光(食料自給率(H13年:米国122%/フランス121%/ドイツ99%/英国61%/日本40%)

日本の向かうところが観光立国か? ピンっとこない。

大地震について

草野仁の緊急警告!必ず来る巨大地震生死を分けるボーダーライン

草野仁の緊急警告!必ず来る巨大地震生死を分けるボーダーライン

地震対策の情報収集として、購入して早速読んでみた。テレビ朝日で7月2日に放送したものを書籍にまとめたものである。非常に読みやすかった。
津波液状化、火災など地震の揺れの後の現象に注意する必要があることがある。
津波は、深いところで発生すると速く、ジェット機並みの速度で移動するとのこと。
警報を待つまでもなく、大地震が来れば、高台に移動する必要がある。
津波は、通常の波と異なり、塊でくるのでエネルギーもすごい。
ちなみに、巨大津波を起こすのは、プレート境界型地震。東海、東南海、南海地震が相当する。
液状化現象は、砂の層でできた土地、地下水が地表から浅い地域、震度5以上の地域に起きやすい。東京は、地下水が溜まっているらしい。(p58)
火災であるが、火は一度渦巻くと凄まじいパワーで暴れまわるらしい。渦巻きながら上昇気流を発生して火災旋風になり、場合によって、遠心力で渦を維持できなくなり、炎が分散して、飛び散るそうだ。(知らなかった。)
地震の予測であるが、電磁波、地震雲、動物の異常行動、異常現象などがあるらしい。
科学的には認められていないこれら宏観異常現象にも注目する必要がある。
でも どうやら地震発生前の岩盤破壊が起こったときに生じる電磁波が原因っぽい。
地震雲も電磁波、動物の異常行動も電磁波を感知したことによる行動と考えられる。
一読の書である。

相対性理論について

今年は、アインシュタイン特殊相対性理論の100周年である。梅田紀伊国屋などに行くと相対性理論関連のコーナーが設けられている。NHKブックスより"相対性理論の矛盾を解く"という本が出ていたので手始めにこれで相対性理論について今一度勉強してみようと読み始めた。まだ、半分ぐらいしか読んでいないが現段階でのコメント。

相対性理論の矛盾を解く (NHKブックス)

相対性理論の矛盾を解く (NHKブックス)

著者の主張が何であるか? まだ掴めていないが、運動物体が収縮して見える(?)という現象が物理的変化でなくて、座標系のスケール(目盛り)が座標によって異なるために生じる現象だとある。(p28) これって、既存の解釈とおなじではないの? 特に新しいことでないと思うし、長さの収縮現象は、物理的変化が生じているという解釈があったことも初耳だ。うーん。また、運動物体中の時間の遅れの実験は、捏造であったという話もあった。本当だろうか?第5章もいまいち、納得いかないところがある。amazonのReviewでも同じ意見の人がいた。とにかく、一通り、読んでみよう。何か発見があるかもしれない。