師匠の散歩

Perlで遊ぼう

エラーチップス

実際に発生したエラーを羅列する。訪問者の参考になれば幸いである。

  1. カッコの数があわない
  2. ヒアドキュメント
  3. 変数を定義する場所
  4. 文字コード・改行コード
    エラーコードが出ないのに、プログラムが途中で停止することがある
    • 文字コード
      プログラムの記述文字コードがねらいのものと一致しているか確認する
      新規作成では必ずShift_JISで保存するエディタがあるので注意
    • 改行コード
  5. EUC-JPで記述する場合、改行コードが「CRLF」だとエラーになった
    改行コード認識できるエディタで「LF」に変換するとエラーが収まった
  6. 読み出し文字のコード
    • スクリプトと異なる文字コードのファイルを読み込み、操作したとき
    • 暴走したのかどうかわからないが、プログラムが停まってしまい、エラーコードも出ない
      スクリプトと同じ文字コードに変換してから、操作すると回復した
  7. perlEditorの罠
    • perlEditorは、UTF-8が使えないのは残念だが、他にも文字化けする場合を見つけた
    • 文字化けが発生するのは__END__以下に文字化け文字があり<DATA>で読み込む場合
      EUC-JPで記述していると、__END__以下に文字化け文字があると、<DATA>で読み込んだときに文字化けが発生する
      どうやら、perlEditorは、__END__以下の部分をShift_JISで記述されていると勘違いするようだ
    • 文字コードを判定する他のエディタ(たとえばTeraPad)で開き、文字化け部分を修正し保存しなおす
  8. エラー行の一つ前
    • use CGI::Carp qw(fatalsToBrowser warningsToBrowser);としていると、エラーの発生した行がわかる
    • 行表示ができるエディタを使っていれば1対1で問題の行がわかるが、その行にエラーが見当たらない
    • その場合、直前行に問題があることが多く、特にセミコロンやダブルクオーテーションマークが抜けていることが多い
  9. shift
    • @atPagesサーバーで発生
    • 関数の引数引渡しを、my $hoge = shift; としたらこの関数が未定義だというエラーが出た
    • 引渡しを my ($hoge) = @_; にするとエラーが出なくなった
  10. モジュールのエラー
    • use CGI::Carp qw(fatalsToBrowser warningsToBrowser);としていると、エラーの発生した行がわかる
    • モジュールに上記を書かずに文法違反があると、エラーは何も表示してくれなくなる
    • 全てのモジュールに書いておくと、どの文書が問題なのかがわかる

INDEXに戻る // 戻る
Copyright(C) Grandmaster Since 2010. 最終更新:2015/5/28