2011-02-03 16 views
2

私はPerlを初めて使っていて、初めてJavaScriptを学習したばかりです。私は多分(JSのためのFirebugのように)Perlコードをチェックするバリデーターがあるのだろうかと思っています。誰もが信頼できるものを知っていれば大いに感謝します。私は何度もGoogle Googledを成功させました。新しい言語の学習を知っているので、間違いを確実にしています。前もって感謝します!。誰かがPerlのバリデーターを知っていますか

ちょうど構文がクリーンであるかどうかをチェックするために

答えて

6

here is an online perl validator

、あなたはperl -c filenameを試みることができます。コードを形式的に整理するには、PerlTidyを見てください。 。 あなたはワイダーを必要としないかもしれません。あなたは何かを自分ですることができます。デフォルトでは

リダイレクトエラーメッセージ

、エラーメッセージがSTDERRに送信されます。ほとんどのHTTPDサーバーは、STDERRをサーバーのエラー・ログに指示します。一部のアプリケーションでは、サーバーのエラーログとは別のプライベートエラーログを保持したい場合や、エラーメッセージをSTDOUTに送信してブラウザがそれらを受け取るようにする場合があります。

この目的のためにcarpout()機能が提供されています。 carpout()はデフォルトではエクスポートされませんので、あなたが

use CGI::Carp qw(carpout); 

carpoutを言って、それを明示的にインポートする必要があります()関数は、書き込みエラーのために開いているファイルハンドルへの参照を引数として必要です。これは、CGIアプリケーションの先頭にあるBEGINブロックで呼び出され、コンパイラーのエラーがキャッチされます。例:

BEGIN { 
    use CGI::Carp qw(carpout); 
    open(LOG, ">>/usr/local/cgi-logs/mycgi-log") or 
    die("Unable to open mycgi-log: $!\n"); 
    carpout(LOG); 
    } 

carpout()は、この時点であなたのためのログにロックファイルを処理しません。また、carpout()はメモリ内のファイルハンドルでは機能しませんが、パッチを適用しても問題はありません。

実際のSTDERRは閉じられません。CGI :: Carp :: SAVEERRに移動されます。いくつかのサーバーは、CGIスクリプトを扱うときに、スクリプトがSTDOUTとSTDERRを閉じるときにブラウザとの接続を終了します。 CGI :: Carp :: SAVEERRはこれが早すぎることを防ぐためのものです。

さまざまな方法でファイルハンドルをcarpout()に渡すことができます。 "正しい"方法は、ファイルハンドルGLOBへの参照を上回る可能性があります。

carpout(* LOG);

次の構文も同様に認められている:

carpout(LOG); 
carpout(main::LOG); 
carpout(main'LOG); 
carpout(\LOG); 
carpout(\'main::LOG'); 
... and so on 

ファイルハンドルやその他のオブジェクトも同様に動作します。

use CGI::Carp qw(fatalsToBrowser); 
    die "Bad error here"; 
:PERLエラーをMAKING

あなたは(告白、死ぬ)ブラウザにエラーが致命的な送信したい場合

、特別な「fatalsToBrowser」サブルーチンをインポートするために頼むブラウザウィンドウに表示されます

致命的なエラーは、ブラウザとログにエコーされるようになりました。 CGI :: Carpは、初期のコンパイル段階で発生したエラーさえも見られるように、ブラウザに最小限のHTTPヘッダーを送信するように手配します。致命的でないエラーはログファイルにのみ送られます(carpoutでリダイレクトされない限り)。

* fatalsToBrowserは、mod_perlのバージョン2.0以降で動作しないことに注意してください。*

デフォルトでは、デフォルトのメッセージ

を変更し、ソフトウェアのエラーメッセージがでウェブマスターに連絡するノートが続いています電子メールにエラーの日時を記入してください。このメッセージがお好みでない場合は、set_message()ルーチンを使用して変更できます。これはデフォルトではインポートされません。

use CGI::Carp qw(fatalsToBrowser set_message); 
set_message("It's not a bug, it's a feature!"); 

カスタムエラーメッセージを作成するには、コード参照を渡すこともできます。実行時に、スクリプトが終了する原因となったエラーメッセージのテキストを使用してコードが呼び出されます。例:

use CGI::Carp qw(fatalsToBrowser set_message); 
BEGIN { 
sub handle_errors { 
my $msg = shift; 
print "<h1>Oh gosh</h1>"; 
print "<p>Got an error: $msg</p>"; 
} 
set_message(\&handle_errors); 
} 
+0

私はそれを試みましたが、私はWindows Vistaを使用しています。だから、私はインタプリタに対してファイルを実行するとき、私は.. c:\ programs \ thefile.plを書かなければなりません。他のコマンドは機能しません。どうもありがとう。私はPerlの整頓を見ていきます。 –

+1

Vistaでは違うはずがありません。そのperl binディレクトリがPATHにあることを確認してください。 WindowsでPerlに問題がある場合は、http://win32.perl.orgとメーリングリストでFAQを使用できます。 –

+1

私の編集した答えを見てください。 – ayush

6

perlは動的言語なので、検証することはできません。たとえば、実行時に作成される可能性があるため、コンパイル時に存在しないサブを呼び出すことができます。静的バリデーターがコールが正しいかどうかを知る方法はありません。

コードがコンパイルされているかどうか知りたいのであれば、perlインタープリタ自体を使用してください。

指定されたコーディング標準への準拠コードを確認する場合は、Perl::Criticを使用してください。

+1

私はスクリプトで使い始めました。 use strict; 警告を使用します。 診断を使用します。詳細については、 をご参照ください。どうもありがとう。 –

5

この問題には多くの方法があります。 http://perldoc.perl.org/perldebug.htmlを読むと、デバッガの使い方を学ぶことができます。デバッガの使い方は、Firebugに似ています。しかし、自動的に問題を回避するには他にもたくさんの方法があります。あなたは厳しい 使用してコードを開始する場合の一般的なエラーの

  1. 多くのクラスが自動的にキャッチされています。 警告を使用します。

  2. http://perltidy.sourceforge.net/あなたのコードを再フォーマットし、多くの一般的な間違いを簡単に見つけます。

  3. CPANモジュールPerl :: Criticは、コードの分析を自動化して特定のスタイルを決定します。一貫したスタイルは、エラーの追跡を容易にします。
  4. ユニットテストを使用します。 Test :: Moreというコアモジュールは簡単に始めることができます。
+0

ありがとう、私はより多くの情報を入手します。 –

17

Perl自体はどうですか?

perl -c your_program.pl 

プログラムの冒頭に以下を追加すると、多くの頭痛を避けることができます。

use strict; 
use warnings; 
use diagnostics; 

最後に、Perl::Criticがあります。

+2

私は良いPerlの本を読むことが必要だと思います。 http://learn.perl.org/books.html –

+1

+1 Perl:批評 – eckes

+2

http://www.perlcritic.org/ –

関連する問題