その手の平は尻もつかめるさ

ギジュツ的な事をメーンで書く予定です

Perl Beginners #6 に参加して参りました

いつの話だ!!! *1

今回はJPA 代表の牧さん (@) が特別講師 *2 として来られていました。
Q&A セッションとして、1時間牧さんに自由に質問して牧さんがそれに答える、というスタイルで進めていました。

以下まとめ

牧さん (Q&A セッション)
  • コードのコメントは英語で書くのか、日本語で書くのか
    • GitHub とかにアップするコードは英語
    • 仕事で書くコードの時は、日本語で書いたりもする
    • 結局、その「ソースを読む対象」による
  • CPAN モジュールのひな形を作るモジュールは何を使っているのか
    • 何も使わない
    • XS の時はオレオレひな形を使う
    • ライブコーディングで実証
      • "makamaka" を"nakanaka" に書き換えるモジュール
      • マジで何一つ使っていなかった!!!
    • XS は本当に面倒臭い
  • XS モジュールを書きたいんだが、何か良い教材は無いか
    • 「モダンPerl 入門」
    • ↑牧さん謹製
    • 印税が入るので買って欲しい
    • 電子版の方が印税率が高いので、むしろそっちを買って欲しい
  • テストファイルのプレフィックスの数字は付けないとDis られるのか
    • 全然大丈夫
    • 重いテストのプレフィックスを大きい数字にしておけば色々便利かも
  • 「やってはいけないこと」とかはあるのか
    • なぜ定数を畳み込まないのか
      • $Config{userthreads} とかを条件分岐に使う時、なぜ畳み込まないのか
        • 内容不変なのに、何回も何回も実行されるんだよ? 馬鹿馬鹿しい!
      • 1回Deparse で、Perl がどういう風にコードをパースしているかを見た方が良い
        • 条件分岐の条件を畳み込んでおいて、それが偽だった場合はコード自体が無くなる。(最適化される)
      • constant 宣言とかをしておくと最適化されるので良い
      • モジュールが入っているか否かも定数展開できる
      • 定数畳み込みが便利な事例
    • プロトタイプは使わない方が良い
      • 「Test::More なんかで使われているが?」
        • プロトタイプを使うと、プロトタイプ的に関数等を呼べるので便利な場合がある。
      • (&) 以外のプロトタイプは基本的に使わない方が良い
      • コード中でプロトタイプが使われている場合はなにか怪しいと思った方が良い
  • require の使い道について
    • require は単純にPerl が記述されているファイルを読んできて、その戻り値をゲットしてくる
    • require は実行するたびに毎回評価される
    • require が有効なケース
      • 遅延評価をしたい場合
      • 外部データを突っ込みたい場合
    • モジュールが存在するかしないかを確かめたい場合は、eval で囲んでrequire するとエラーメッセージを取って来れて良い
  • eval とdo の違い
    • エラーの返し方が違う
    • require は (基本的に) 1回しか呼べないが、do は何回でも呼べる
    • do は死なない
    • delete $INC{key} みたいな感じでやると、何度でもrequire 出来るようになる
      • 割とクレイジーなやりかただから、これをやりたくなった場合は考え直した方が良い
    • 過去のPerl Beginners で@ さんがこの話題に触れているので、ust 録画を見るよろし
  • 外部データをプログラムに与える時のベスト・プラクティスは
    • require を使うと良い。外部データの中身にコードを書けるから便利
    • 定数とかを持たせたい場合ば、constant みたいなファイルを作って管理する
  • なにが出来たら「脱初級者」と言えるのか
    • プログラム初心者はPerl やめといた方が良い
    • 一番最初はC言語が良いのでは
      • おせっかいじゃない言語が良い
    • あるいはJava とかでも良いかも
    • IDE は悪いわけじゃない。生産性メインだったらIDE 使った方が良い
    • VB は悪い言語ではないと思うが、エラーメッセージが意味不明過ぎて死ねる
  • STF
    • 生のSQL 文、生のDBI を触る事でもりもりやる
    • あとオレオレキャッシュとかも使う
    • DBI をマトモに扱えないのにO/R マッパを使うのは不幸にしかならない
      • O/R マッパーは要らん機能があるし、要らん事をする場合がある

以下LT

@ さん
  • 配列で遊んでみた
    • 配列をprint するとjoin されて表示される
    • $, と$" の違いについて
      • $, はprint のオプション
      • $" は文字列のオプション
    • Acme::Replica の紹介

@ さん
  • 配列をそこそこもっともらしく扱う
    • 配列とは何か
      • @ シジルが付いている変数が「配列」
    • 配列とリストは違う
      • 配列をスカラに突っ込んだときは要素数が出る
      • リストだと最後の要素が出る
    • 配列の中から特定の要素を抜き出したい場合はgrep でできる
    • 配列の写像を作りたい時はもちろんmap
    • 配列の中身を舐めるときはfor で
    • 配列の並び替えはsort
    • あとはこれらの組み合わせで配列を処理できる
    • 速度的な話
      • 最優先でやった方が良いのはgrep。要素数を減らせる

@ さん
  • 引数に配列を使う
    • 引数にスカラを沢山渡すとだるい
    • 配列のリファレンス渡しでやるとハッピー
    • リファレンスとデリファレンスの解説
    • 型グロブの解説
    • 便利なモジュールの紹介

@ さん
  • 「海賊王に俺はなる」*3
  • (2012.02.11 追記。指摘を受けたので!)
  • (以下追記)
  • 海賊=パイレーツ、パイレーツ≒配列 (!!!)
  • Acme 大全の行商
  • 2012年冬コミで頒布したPerl すごろくの紹介

*1:1/25(金) の話です

*2:特別講師?

*3:と言っていた気が……いかんせん記憶が曖昧に……