SlideShare uma empresa Scribd logo
1 de 43
Baixar para ler offline
Error.pmの簡単な紹介
     ビンゴ中西



                 1
   エラーについて、考えて見ましょう




                      2
    まず、bashで、
  
    cat b.txt
  
    とすることを考えよう。


                  3
  ファイルがないところで

  cat b.txt

  すると・・・



                4
〔結果〕
cat: b.txt: No such file or directory



                                        5
ファイルがないと怒られてしまった。




                    6
    Perlで同じように ファイルを
    open してみることを考える



                       7
open my $FILE, '<', 'b.txt';




                               8
〔結果〕




       9
何も表示されない




           10
      これでは、よくないので、
      die してみる。



                     11
  open my $FILE, “b.txt”
   or die “ファイルがないっす”;



                           12
〔結果〕
ファイルがないっす at hoge.pl line 1



                              13
   これで、エラーの原因を表示して、
   プログラムを終了(die)させることは
   できた。



                         14
  でも、
  エラーの原因をログに書き出したい!
  データベースにも登録したい!
   


                      15
    また、
    ファイルがないくらいでは、
    処理を続行してほしい!



                    16
そこで、Error.pm




               17
use Error qw(:try);

try {
  open my $FILE, “b.txt” or die “ファイルがないっす”;
} otherwise {
  my $e = shift;
  print $e;
};
print “プログラムは続行可能!!” . “n”;


                                               18
〔結果〕
   ファイルがないっす。 at hoge.pl line 4.
   プログラムは続行可能!!



                                   19
     Error.pmを使わないで、
     次のように書くと・・・



                       20
open my $FILE, “b.txt” or die “ファイルがないっす”;
print “プログラムは続行可能!!” . “n”;




                                             21
〔結果〕
ファイルがないっす at hoge.pl line1.



                              22
このように、Perlは即死んでしまう。




                      23
   どういうことか?
   Error.pmはなにをしてくれるのか?



                          24
  〔説明〕

   tryで囲った中でのdieは
   捕捉されて、
   dieした瞬間に
   otherwise句の中に処理が移る。

                         25
 otherwiseの中では、
 my $e = shift;
 としてやることで、
 $eに、
 dieの内容(今回は,”ファイルがないっす”)
 をもらうことできる。

                           26
だから、
 otherwise句の中に、

   ・ログへの書き出し
   ・データベースに登録
  といった処理を書いてやればよい。

                     27
  さらに、
  othewise句を抜けたあとは、
  プログラムは死なず、
  処理をつづけることができる。


                      28
   ソースを見ながらでないと、
   わかりにくいので・・・



                   29
再掲

     30
use Error qw(:try);

try {
  open my $FILE, “b.txt” or die “ファイルがないっす”;
} otherwise {
  my $e = shift;
  print $e;
};
print “プログラムは続行可能!!” . “n”;


                                               31
   では、もう少し、
   Error.pm を見てみましょう。



                        32
 関数の中で die していても
 try で囲っていれば、
 プログラムを死なせることはありません。



                   33
sub bad_sub {
    open my $FILE, “b.txt” or die “ファイルがないっす”;
}




                                                 34
try {
  bad_sub();
} otherwise {
  my $e = shift;
  print “ここで表示! “ . “$e”;
};
print “プログラムは続行可能!” . “n”;


                              35
もう少し、複雑な要求に関して




                 36
 SQLに失敗したときはロールバックしたい!

 ファイルのオープンに失敗したときは
 ログに書き出したい!



                         37
 オリジナルの例外を作りましょう。
 
 これで、どこかの言語みたいになるぞ!



                      38
my_SQLException.pm

package my_SQLException;

use base qw/Error::Simple/;
use overload '””' => sub { shift->stacktrace };



                                                  39
use Error qw(:try);
use my_SQLException;

try{
  my_select()
      or my_SQLException->throw(“SQL失敗”);
  open_file()
      or my_IOException->throw(“ファイル失敗”);
} catch my_SQLException with {
  # ロールバック;
} catch my_IOException with {
  # ログへの書き出し;
};

# 処理を続行;                                    40
 catch で
 例外ごとに
 処理を分けることができます。

 スイッチ文みたいなものと考えると
 わかりやすい。

 otherwiseはどのcatchにも
 該当がないときに処理される。
                       41
 最後に、注意。
 
 try { } otherwise { };
 
 というように最後に
 セミコロンを入れるのを、
 忘れないようにしてください。

                          42
ご清聴ありがとうございました




                 43

Mais conteúdo relacionado

Mais procurados

Talk In Point Of Gc Once In While
Talk In Point Of Gc Once In WhileTalk In Point Of Gc Once In While
Talk In Point Of Gc Once In WhileNarihiro Nakamura
 
通用 web 开发技术体系介绍
通用 web 开发技术体系介绍通用 web 开发技术体系介绍
通用 web 开发技术体系介绍zhyq0826
 
本当は怖いObjectSpace.each_object
本当は怖いObjectSpace.each_object本当は怖いObjectSpace.each_object
本当は怖いObjectSpace.each_objectNarihiro Nakamura
 
CSS 排版 - 基礎觀念篇
CSS 排版 - 基礎觀念篇CSS 排版 - 基礎觀念篇
CSS 排版 - 基礎觀念篇Jace Ju
 
Betacamp4.选秀
Betacamp4.选秀Betacamp4.选秀
Betacamp4.选秀zhu02
 
Betacamp4.选秀
Betacamp4.选秀Betacamp4.选秀
Betacamp4.选秀rippleye
 
WebアプリケーションフレームワークMojoの紹介
WebアプリケーションフレームワークMojoの紹介WebアプリケーションフレームワークMojoの紹介
WebアプリケーションフレームワークMojoの紹介Yuki Kimoto
 
Meconomy –Ch3,4
Meconomy –Ch3,4Meconomy –Ch3,4
Meconomy –Ch3,4jeong son
 
クロスレビュー
クロスレビュークロスレビュー
クロスレビュー武 河野
 
Web技術勉強会10回目(Slideshare用)
Web技術勉強会10回目(Slideshare用)Web技術勉強会10回目(Slideshare用)
Web技術勉強会10回目(Slideshare用)龍一 田中
 
山行記録共有データベース「ヤマレコ」
山行記録共有データベース「ヤマレコ」山行記録共有データベース「ヤマレコ」
山行記録共有データベース「ヤマレコ」Kazumine Matoba
 
動画圧縮のしくみ
動画圧縮のしくみ動画圧縮のしくみ
動画圧縮のしくみRyo Amano
 

Mais procurados (20)

Talk In Point Of Gc Once In While
Talk In Point Of Gc Once In WhileTalk In Point Of Gc Once In While
Talk In Point Of Gc Once In While
 
通用 web 开发技术体系介绍
通用 web 开发技术体系介绍通用 web 开发技术体系介绍
通用 web 开发技术体系介绍
 
本当は怖いObjectSpace.each_object
本当は怖いObjectSpace.each_object本当は怖いObjectSpace.each_object
本当は怖いObjectSpace.each_object
 
CSS 排版 - 基礎觀念篇
CSS 排版 - 基礎觀念篇CSS 排版 - 基礎觀念篇
CSS 排版 - 基礎觀念篇
 
Betacamp4.选秀
Betacamp4.选秀Betacamp4.选秀
Betacamp4.选秀
 
Betacamp4.选秀
Betacamp4.选秀Betacamp4.选秀
Betacamp4.选秀
 
What is PHP Frameworks?
What is PHP Frameworks?What is PHP Frameworks?
What is PHP Frameworks?
 
WebアプリケーションフレームワークMojoの紹介
WebアプリケーションフレームワークMojoの紹介WebアプリケーションフレームワークMojoの紹介
WebアプリケーションフレームワークMojoの紹介
 
Meconomy –Ch3,4
Meconomy –Ch3,4Meconomy –Ch3,4
Meconomy –Ch3,4
 
okyuu.com x OpenID
okyuu.com x OpenIDokyuu.com x OpenID
okyuu.com x OpenID
 
WebDAV as Web API
WebDAV as Web APIWebDAV as Web API
WebDAV as Web API
 
BRXbox
BRXboxBRXbox
BRXbox
 
クロスレビュー
クロスレビュークロスレビュー
クロスレビュー
 
RDF and FOAF
RDF and FOAFRDF and FOAF
RDF and FOAF
 
Web技術勉強会10回目(Slideshare用)
Web技術勉強会10回目(Slideshare用)Web技術勉強会10回目(Slideshare用)
Web技術勉強会10回目(Slideshare用)
 
Future Of TV
Future Of TVFuture Of TV
Future Of TV
 
山行記録共有データベース「ヤマレコ」
山行記録共有データベース「ヤマレコ」山行記録共有データベース「ヤマレコ」
山行記録共有データベース「ヤマレコ」
 
Eenadu Promoters Pledging Mar 19, 2009
Eenadu Promoters Pledging   Mar 19,  2009Eenadu Promoters Pledging   Mar 19,  2009
Eenadu Promoters Pledging Mar 19, 2009
 
動画圧縮のしくみ
動画圧縮のしくみ動画圧縮のしくみ
動画圧縮のしくみ
 
錯覺
錯覺錯覺
錯覺
 

Error.pmの簡単な紹介