「優れたPerlプログラマを見分ける27の質問」に回答

元ネタはこちら
http://d.hatena.ne.jp/gfx/20110301/1298944990


回答例はこちら
http://blog.livedoor.jp/dankogai/archives/51645218.html


以下、やってみました。

1. Perl5において変数のシジルが示すものは何か
 → $,@,%,*。スカラー、配列、ハッシュ、型グロブ
 →○

2. 配列のアクセスする際の $items[$index] と @items[$index] の違いは何か
 →$items[$index]は@items配列の$index番目の要素へのアクセス。
 →@items[$index]は%itemsハッシュの$indexをキーとする値へのアクセス。
 →× @items{$index} と勘違いしてた。。

3. == と eq の違いは何か
 →「==」は数値比較。「eq」は文字列比較
 →○

4. ハッシュをリストコンテキストで評価すると得られるものは何か
 →%hash = ( a => 1 , b => 2); だったら、 ( 'a' , 1 , 'b' , 2)の4要素を持つ配列
 →△ この順番とは限らないか・・

5. Perlドキュメントからキーワードを検索するにはどのようにするのか
 →わからなかった・・・
 →× perldocなのか。

6. Perl5における関数とメソッドの違いは何か
 → MyApps::hoge($param) だと第一引数が$paramで、MyApps->hoge($param)だと「MyApps」が第一で、$paramは第二。
 →○

7. Perl5が変数のメモリを再利用するのはいつか
 →わからない><
 →×

8. 変数のスコープがデフォルトでレキシカルであると保証するにはどのようにするのか
 → 「my」 で宣言する
 →○

9. モジュールからシンボルをインポートするにはどのようにするのか
 →?
 →× 設問が読解できてないので論外

10. perlがモジュールのロードを敢行するディレクトリの操作はどのようにするのか
 →「::」を「/」に変換して検索?
→× 適当に書きすぎた

11. Perl5のエラーメッセージの検索はどのようにするのか(発生するエラーメッセージに説明を加える方法を知っていればボーナスポイント)
 →?
 →×

12. 配列を関数に渡したときに起きることは何か
 → $class->func( @ary , $scalar );だったら、sub funcで$scalarを判別することは無理。@_の中に全部まとめて入ってしまうので。
 →× そういうことじゃない

13. 複数の配列をそれぞれ区別して関数に渡すときにはどのようにするのか
 → リファレンス渡し。$class->func( \@ary1 , \@ary2 , \@ary3 );
 →○

14. 呼び出された側から見た return; と return undef; の違いは何か
 → @result = sub func{ return; }; if @result は偽だけど、
   @result = sub func{ return undef; }; if @result は真。「undef」という要素が@resultに入っている。
 →○かな?

15. 標準的CPANディストリビューションではテストはどこに置かれるか
 → t/配下
 →○

16. 標準的CPANディストリビューションでテストを走らせるにはどのようにするのか
 → perl Makefile.pl → make → make test。
 →○

17. CPANから新しいディストリビューションをインストールする際に使うコマンドはなにか
 → cpan install App::cpanminus
 →○ そして、以後はcpanmを・・・

18. 組み込み関数openを3引数形式で使うのは何故か
 → ファイルハンドルをレキシカルスコープにするため
 →△ 微妙にズレてる

19. openのようなシステムコールのエラーを検出(と報告)するにはどのようにするのか(エラーの検出と報告を自動的に有効にする方法を知っていればボーナスポイント)
 → eval{};でくくって、 $@で検出?
 →× なんか読み違えてた

20. Perl5で例外を投げるにはどうするのか
 → die; もしくは Carp::croak;
 →○

21. Perl5で例外を捕捉するにはどうするのか
 → eval{};でくくって、 $@で検出?
 →○

22. ファイルの読み込みにおけるforとwhileの違いは何か
 → わからなかった。。
 →× 猛省します


23. メソッドと関数においてパラメータ*3を取り扱うにはどうしたらよいか
 → $param = shift; で取ると、@_から先頭要素を抜く。 ($param1 , $param2 ) = @_; で取ると、@_からコピーで取得。
 →○

24. my ($value) = @_; の変数を囲む括弧が意味するものは何か、またこの括弧を取り除くと何が起きるか
 → わからなかった。。
 →× 言われてみりゃ、そりゃそうだ・・・

25. new は組み込み関数ないしキーワードか
 → No。
 →○

26. コアライブラリやCPANモジュールのドキュメントを読むにはどのようにするのか
 → perldoc perl
 →○

27. ハッシュの値のみを取り出したい時はどのようにするのか
 → my $result = value ( %hash );
 →× 地味に「value『s』」だったorz

結果
○:14
△:2
×:11


なんていうか、50点・・・。8割で優れているとのことなので、
27 * 0.8 なので22問以上は答えられるよう頑張らないといけないですね。。
ダメすぎて凹んでますが、晒すネタとしてちょうどいいかも。