2011年11月19日のブックマーク (1件)

  • 間接オブジェクト記法の怪 - 時計を壊せ

    怖い話 友人がこんなコードがうまく動かなくてハマっていました。 擬似コード use strict; use warnings; # ... sub hogemethod { # ... try { A; } catch { die $_; #(comment out) # ... }; # ... } # ... 1; このコードはtryの中で死ぬかもしれない処理Aをして、catchでエラーを受け取ってそのままdieする処理に見えます。 しかし、実際はtryを実行し終わったあと、catchも実行されてしまいます。 tryの中の処理が成功した場合はcatchは実行されない筈ですよね? なぜ実行されてしまうのでしょうか。 答えは、Try::Tinyをuseしてなかったからです。 「じゃあ当たり前じゃん」と思った人はそのままブラウザバックするか、こんな時間にこんな記事読んでないで寝ると良いでしょ

    間接オブジェクト記法の怪 - 時計を壊せ