sironekotoroの日記

Perl で楽をしたい

はじめてのPerl 第6版 第6章 ハッシュ 〜 第7章 正規表現

ひさしぶり

  • ほぼ毎週、会社でも空き時間でperl書いてはいたけど、自作スクリプトがらみで全く基礎がおろそかに。
  • 自作スクリプトが行き詰まってきたので、基礎の勉強に戻ってきた次第。

作ってたもの

  • 株価をWebからスクレイピングして、ファイルに出力
  • あるルールに従ってDB(sqlite)に登録
    • DBIx::Custom を利用
  • packageでモジュール分け
  • 条件入力をmojolicious::liteでつくったフォームからおこなう
  • データを配列で持ってくるのか、ハッシュで持ってくるのかなどで試行錯誤

現状

  • DBのファイルサイズが大きくなって応答速度がめっちゃ落ちた
    • 132860レコードで1.3秒が、30026360レコードでは80秒に
    • 最終的には485071860レコードを扱いたいのに
  • DBの勉強不足をしみじみと感じる
    • TRIGGER って仕組みがある事知らんかった
      • updateを都度perlでやらなきゃダメだと思ってた
    • そろそろsqliteではなく、mysqlなどを使うべきだろうか・・・とか
  • しかし、1つの課題が終わると、別な課題が2つ見えてくるなぁ。
  • 焦っても仕方ないので、放り出したままの基礎に戻ってきたのでした。
    • それにしても、自作スクリプトの楽しさよ。
    • 自分の欲しい物作るんだから当然か。

6.1 ハッシュとは

  • Perl入学式の練習問題を思い出しながら。
    • あの練習問題は本当に良かった。あれで理解できた面がある。

その昔、ハッシュは「連想配列」(associative array)と呼ばれていました。しかし、1995 年ごろに、タイプするに も字数が多すぎるし、発音するにも長すぎるという意見が Perl コミュニティで大勢を占めたために、「ハッシュ」 という名前に変更されました。 (第6版 131p)

  • 知らなかったわ・・・

しかし、ハッシュを何らかの形で変換するという処理は、もっと頻繁に行なわれます。例えば、 次のようにすれば、逆引き用のハッシュを作ることができます:
my %inverse_hash = reverse %any_hash; (第6版 139p)

  • 唖然とする
  • 値が重複しない限り、ではあるけど、こういう考え方、やり方があるなんて

7.2.4 パターンをグループにまとめる

  • 後方参照、1個だけなら何とかなる気がするけど、2個以上になるとよく分からなくなる