呼び出し元の観点で例外を発生させるCarpモジュールを使用すると、モジュールの呼び出し元の観点で例外を発生させることができます。'croak';croak関数を使用するとモジュールの呼び出し元の観点で例外を発生させることができます。メッセージの末尾には呼び出し元の行番号が追加されます。"Exception!";例外はdie関数で発生させることができますが、die関数は実行された位置の行番号をメッセージの末尾に追加します。croakはcroakが実行された位置の行番号ではなく、呼び出し元の行番号を末尾に追加する点がdieと異なります。dieとcroakの使いわけとして、次の点を覚えておきましょう。Perlスクリプト(*.pl)で例外を発生させる場合はdieを使用するPerlモジュール(*.pm)で例外を発生させる場合はcroakを使用する。モジュールの呼び出し元の観点とはモジュールの呼び出し元の観点という言葉は少し理解しづらい部分があると思いますので、サンプルを使って説明してみます。YourModuleモジュールでparse関数が定義されているとしましょう。mainパッケージでこの関数を呼び出して例外が発生したとします。最初はdieの例を見てみましょう。parse関数の呼び出し。#14このプログラムは次のメッセージを表示して終了します。dieが実行された行番号が含まれています。7.次はcroakの場合です。parse関数の呼び出し。#14するとプログラムは次のメッセージを表示して終了します。parseが呼び出された位置の行番号が含まれています。14このようにcroakを使用すると呼び出し元の観点で例外を投げることができます。完全なスタックトレースを見るどこから関数が呼び出されてどの位置で例外が発生したかというすべての情報について知りたい場合があります。このような場合にはcroakで追加されるメッセージを変更して完全なスタックとレースを表示する方法があります。次の一行をスクリプトの好きな位置に追加するだけです。'verbose';先ほどのスクリプトに埋め込んでみました。YourModule::parse()の直前に置きました。'verbose';YourModule::parse();すると次のように完全なスタックトレースを見ることができます。14一般的にいえばCPANに存在するPerlモジュールの多くは例外を発生させるときにcroakを使用しています。'verbose'を記述することで、完全なスタックトレースを見ることが期待できるということです。モジュールがさらに他のモジュールを利用している場合に、そこで発生した例外は本当の呼び出し元の観点ではないということがあります。本当の呼び出し元の行番号がわからない。'verbose'を記述することで完全なスタックトレースを取得することができます。Carpモジュールにはconfessという関数もありますがcroakを使ったほうがよいのでしょうか。confessは完全なスタックトレース情報を表示させることができますが、croakはメッセージが簡潔で、オプションを指定することで完全なスタックトレース情報に切り替えることができるので好んで利用されるようです。例外ではなく警告を発生させたいです。carp関数を使用すると警告を発生させることができます。'Warning!';Q.スクリプトを変更せずに完全なスタックトレースを表示させたいのですが可能でしょうか。スクリプト単位で指定したい場合は次のようにします。script.plまたPERL5OPTという環境変数を利用すれば、すべてのスクリプトについて完全なスタックトレースを表示することができます。PERL5OPTにすでに値が設定されている場合は空白の後ろに接続するようにしてください。業務に役立つPerlログ解析など日本語を含むテキスト処理の実践!案内YouTubeでもっと簡単にプログラミングを学ぶならPerlゼミちゃんねるLinuxコマンドを学ぶならLinuxサーバー管理入門Webデザインを学ぶならWebデザイン入門Web開発を始めるななMojoliciousスタートアップブログを作るならGiblogプログラミングの勉強会ならPerl入学式お問合せはこちらPerlは、テキスト処理の記述性とパフォーマンスに優れ、正規表現が言語に組み込まれているプログラミング言語です。Linuxサーバー管理でのフィルタリングプログラム、複数行の文字列を処理、ファイル内容の検索・置換などが得意。Mojoliciousを使ったWebサービス開発も。Perlは、gitやopensslなどUnix/Linuxミドルウェアの支援ツールとして採用されています。