有限会社ミスティーネットPerl・CGI講座 パール・CGIレッスン MISTY-NETレンタルサーバー・PERLプログラミング講座 CGI&PERL究極のレシピ

管理運営:有限会社ミスティーネット

| HOME | ご利用について | 推奨環境 | リンクに関して | 免責/規約 | お問合せ | ミスティーネット | リンク集 |
Perl言語リファレンス

ミスティーネットPerl・CGI講座/基本編
ミスティーネットPerl・CGI講座/基本編
始めに 始めに
変数について 変数について
処理の制御1 処理の制御1
処理の制御2 処理の制御2
配列の処理 配列の処理
ハッシュの処理 ハッシュの処理
数値の扱い 数値の扱い
文字の扱い 文字の扱い
時間の処理 時間の処理
サブルーチン サブルーチン
ファイルの処理 ファイルの処理
ディレクトリの処理 ディレクトリ処理
CGIについて CGIについて
漢字の処理 漢字の処理
    (文字コード)
Cookie の処理 Cookie の処理
正規表現1 正規表現1
正規表現2 正規表現2
演算子について 演算子について
ライブラリ ライブラリ
デバッグ デバック
環境変数について 環境変数
ミスティーネットPerl・CGI講座/基本編

ミスティーネットPerl・CGI講座/応用編
ミスティーネットPerl・CGI講座/応用編
カウンターを作ってみよう カウンターを
     作ってみよう!
ミニゲームを作ってみよう ミニゲームを
     作ってみよう!
ミスティーネットPerl・CGI講座/応用編

ミスティーネットPerl・CGI講座/WEB講座一覧
ミスティーネット
HTML講座 HTML講座
スタイルシート講座 スタイルシート講座
JavaScript講座 JavaScript講座
UNIXコマンド講座 UNIXコマンド講座

ミスティーネット
ラブラブメールでツーショット

人気サイトランキング

人気サイトランキング

8daysランキング

  HOME >> デバックについて
  1. デバックについて
  2. 文法ミスのチェック
  3. ブラウザーでのチェック
  4. よくある間違い
■ デバックについて
デバックとは、プログラムの修正作業のことです。
プログラムを作成する際には、エラーは必ずでてくるものです。そこで、いかに短時間で効率的にエラーを発見し修正できるかが大切になってきます。
この章では主に、エラー部分の発見方法をいくつかご紹介いたします。

最も一般的なものに、print文によるチェックがあります。
プログラムの途中に print文をはさんで、変数の値や、関数の戻り値などを確認します。

下記に、性別を判定する簡単なプログラムがありますが、このプログラムには間違いがあります。
男性の「M」 を入力すると 「あなたの性別は女性です。」 と表示されてしまいます。
どの部分が間違っているのでしょう?

[性別判定プログラム]
print "あなたの性別は?(男性=M、女性=F)=>";
$input = <STDIN>;
chomp $input;

if ( $input eq 'M' ) {
     print "あなたの性別は女性です。";
} elsif ( $input eq 'F' ) {
     print "あなたの性別は男性です。";
} else {
     print "再度御入力ください。(男性=M、女性=F)=>";
}
exit;

短いプログラムなので、すぐに分かった方もいると思いますが、順番に確認していきましょう。
まず、下記のように、プログラムの途中に print文をはさんで変数が正しく取得できているか確認します。 入力した文字が表示されればOKです。

print "あなたの性別は?(男性=M、女性=F)=>";
$input = <STDIN>;
chomp $input;
print $input;      ← $input 変数が正しく取得できているかを確認
exit;
・・・

ここでは、入力された文字が正しく取得されていると思います。
ということで、次に疑わしいのは分岐処理の部分となります。
よく見ると、男性の場合と女性の場合の表示メッセージが逆になっています。

if ( $input eq 'M' ) {
     print "あなたの性別は女性です。";    ←┐
} elsif ( $input eq 'F' ) {         表示メッセージが逆になっている
     print "あなたの性別は男性です。";    ←┘
} else {
     print "再度御入力ください。(男性=M、女性=F)=>";
}

そこで、下記のように修正して、正しいプログラムとなりました。

print "あなたの性別は?(男性=M、女性=F)=>";
$input = <STDIN>;
chomp $input;

if ( $input eq 'M' ) {
     print "あなたの性別は男性です。";    ←┐
} elsif ( $input eq 'F' ) {         表示メッセージを入れ替えた
     print "あなたの性別は女性です。";    ←┘
} else {
     print "再度御入力ください。(男性=M、女性=F)=>";
}
exit;

このように、変数等を確認していって正しい部分を確認していくことで、間違い部分を絞り込んでいきます。



上のサンプルプログラムでは、動作はするが動作結果が不正なエラーの例でした。
実際には、動作自体行なわれないエラーのほうが多いと思います。
そのような場合は、疑わしい部分を 「#」 を使ってコメントアウトして、動作が行なわれるか確認する方法があります。

下記のプログラムは、print文でメッセージを表示するだけの簡単なプログラムですが、エラーとなり動作しません。
どこがおかしいのでしょうか?

print "こんにちは。"
print "これはテストプログラムです。";
exit;

そこで、下記のように1行目をコメントアウトして動作確認すると、正しくメッセージが出てきます。

#print "こんにちは。"
print "これはテストプログラムです。";
exit;

よく見ると、1行目の末尾に 「;(セミコロン)」 を入れるのを忘れています。
下記のように修正して、動作するようになりました。

print "こんにちは。";
print "これはテストプログラムです。";
exit;

このように、疑わしい部分をコメントアウトし動作確認していくことで、間違い部分を絞り込んでいきます。




■ 文法ミスのチェック
Perl に 「-wc」 オプションをつけて起動すると、文法チェックが行なえます。
「-w」 はスクリプトの構文チェックを行い警告メッセージを出力します。
「-c」 は構文チェックのみを行い、スクリプトを実行せずに終了します。

   → その他のオプション

ActivePerl でチェックする場合
#!C:/Perl/bin/perl -wc

サーバー上でチェックする場合
#!/usr/local/bin/perl -wc
警告メッセージは英語で表示されますが、間違っている変数名や行数なども表示される為、 英語が特に読めなくても、どの部分が間違っているかが大体分かります。




■ ブラウザーでのチェック
下記の方法で、ブラウザー上からエラーチェックを行なうことが出来ます。
「BEGIN」 から始まる1行を、Perlのパス指定の下に追加することで、ブラウザーから簡単にチェックを行なえます。
エラーがない場合は、Perl での処理結果がそのまま表示されます。


#!/usr/local/bin/perl
BEGIN{ $| = 1; print "Content-type: text/html\n\n"; open(STDERR, ">&STDOUT"); }
エラーがある場合には、エラーメッセージが標準エラー出力チャンネル(STDERR) に格納されます。
この標準エラー出力を、HTML出力としてWEBサーバーに渡します。





■ よくある間違い・文法ミス
ここでは、よくあるPerlでの間違いをご紹介いたします。
エラーがでたときの参考にしてください。

・ 文の末尾に 「; (セミコロン)」 を忘れている
・ 関数や変数のスペルミス
・ プログラム内に全角スペースが使われている


・ Perl のパスの記述を間違えている
・ 条件の判定で文字列に 「==」 や 「=>」 などの数値演算子を使っている
・ 条件の判定で数値に 「eq」 や 「ne」 などの文字列演算子を使っている


・ ライブラリの最後に 「1;」 の記述を忘れている
・ 「Content-Type: text/html」 の指定を忘れている、あるいは間違っている
・ パーミッションを設定していない(サーバー上で動作させる場合)
・ ループ処理が無限ループになっている




← 前のページへ戻る 次のページへ →


| HOME | ご利用について | 推奨環境 | リンクに関して | 免責/規約 | お問い合わせ | ミスティーネット |
(C)Copyright 2002 有限会社ミスティーネット Inc. All Right Reserved.