• ベストアンサー

perlでステップイン

perlを勉強しています。 現在掲示板を作成しているのですが、思ったように動いてくれません。 例えば if ($FORM{'mode'} eq "test") { &test; } といった感じに記述しているのですが、mode=testでも sub testを通っていない状態なのです。 そこで、ステップイン実行が出来れば、どこがおかしいのかが わかりやすいと思ったのですが、そういうソフト等ってあるのでしょうか? ご存知でしたら教えてください<(__)>

  • Perl
  • 回答数3
  • ありがとう数4

質問者が選んだベストアンサー

  • ベストアンサー
  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.3

通常、perlのスクリプト(xxx.pl)を書いたとき、それを動かす為には、perl xxx.plとコマンドラインから入力します。このことをperlを起動すると表現しました。この場合、perl -d xxx.plとすることにより、デバッグモードでperlが起動することになり、スクリプトを1ステップ毎に実行できることになります。(それなりにコマンドをいくつか投入したりしますが・・・) 今回の場合、上記のような形でスクリプトを動かしていないようですので、このオプションの使用はあきらめた方が、よいと思われます。 VBとかVCのデバッガのようなもの期待されている場合(画面上で、直感的に操作できるデバッガ)は、残念ながらそれに該当するものを私は知りません。 デバッガを使わない手っ取り早い手段としては、 printfで画面(標準出力か標準エラー)に変数の内容を出力する方法をとるのが、現実的かと思います。

Tsuboko
質問者

お礼

再度ありがとうございます。 コマンドラインですか、なるほどなるほど・・・ まだまだ勉強不足で用語はいまいちわからないですが、 いろいろ調べてみようと思います(^▽^)ノ

その他の回答 (2)

  • bikkuri
  • ベストアンサー率33% (23/68)
回答No.2

掲示版とあるので、perlのcgiかと思います。 perlのデバッガは使ったことが無いですが、デバッガor類似の事を するには、telnetなどのコマンドラインから実行、その後の指示をする必要があります。 (プロバイダ上のWEBページでしたら、telnetが使えないことも多いはず) あと、cgiをコマンドラインから実行するのは簡単ですが、formなどのパラメータを 上手く手動で渡す必要もあります。 (postなら標準入力から、getなら環境変数から・・・)

Tsuboko
質問者

お礼

ありがとうございます。 telnetですね、早速調べてみます(^▽^)ノ

  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.1

perl自身がデバッガを内包しています。 perl -d XXXX.pl のように-dオプションをつけて perlを起動して下さい。 起動後は h[コマンド]により、ヘルプが表示されます。

Tsuboko
質問者

補足

ありがとうございます。 それはどこかに記述するものなのでしょうか? それでステップインと同じ事が行えるのですか? perlを起動というのはどういう事ですか? 無知ですみません(>_<;;;

関連するQ&A

  • php と perl

    perlで掲示板を作成する際はだいたい、 ####メインルーチン if($FORM['mode']="write";){&write;} elsif($FORM['mode']="usr_delete";){&usr_delete;} elsif($FORM['mode']="user_edit";){&usr_edit;} elsif($FORM['mode']="admin";){&admin;} … &html; exit; ####サブルーチン sub write { #書き込み処理 } sub usr_delete { #削除処理 } … といったように記述しますよね。 これをphpでも同じように、 //メインルーチン switch ($_POST['mode'])  case "write":   write();  case "delete":   delete();   … //サブルーチン function write(){…} function delete(){…} … と書くのは効率的ではないでしょうか。 効率とは"速さ"や"実装の仕方として適切ではないかどうか"、という意味です. 他サイトで配布されているphpのスクリプトに目を通すと、そう記述しているものがあまりみられませんでした。 もう1つ疑問なのですが、掲示板のスクリプトにクラスを使っているサイトが多々ありました。もちろんつかってないスクリプトなどもありましたが、掲示板作成をする際、クラスを使うメリットはあるのですか?

    • ベストアンサー
    • PHP
  • Perlでの複数行にわたるコメント

    Perlにおいて複数行コメントを記述するには =for comment コメントを記述 =cut と書けるとのことですが =for commentと=cutの間に 以下のように1行のコメントが記述されていても問題ありませんか? =for comment #名前をチェック if ($FORM{'name'} eq "") { $error .= "「名前」が入力されていません。$br"; } #タイトルをチェック if ($FORM{'title'} eq "") { $error .= "「タイトル」が入力されていません。$br"; } #コメントをチェック if ($FORM{'comment'} eq "") { $error .= "「コメント」が入力されていません。$br"; } =cut

    • ベストアンサー
    • Perl
  • IF文でページ振り分けがうまく出来てない。

    CGI勉強中です。 ある掲示板CGIを改造して会員のみに使用可にしようと考えています。パスワード自体は無事組み込むことが出来たのですが、1つ問題が出ました。 掲示板なので、過去ログがありますよね。その過去ログページを表示しようとするとまた認証ページに戻ってしまい、パスワードを再度入力→最新10件のページに戻ってしまいます。どうにかして、1度入ったらパスワードを入力しなくてもいいようにしたいのですが… 今のところこうなってます。 /////////////// if ($pass_mode == '1'){ ←もしパスを使用するだったら if ($F{'mode'} eq '') { &pass_mode} ←モード無しの場合、パス入力画面に移動 if ($F{'mode'} eq 'admin') { &admin} ←モードアドミニならsub adminへ } else{ if ($F{'mode'} eq '') { &main_form} ←メイン書き込みページへ else { &{$F{'mode'}} } } /////// となっています。 また、過去ページへの移動は「**.cgi?pg=10&sort=」という感じです。 この状態で、ページ移動時にパス入力ページに移動しないようにするにはどうしたらいいでしょうか?cookieを使う必要があったりしますか? 抜けてる情報・足りない情報があったら指摘してください。すぐ補足します。言語はperlで書いています。 よろしくお願いします。

    • ベストアンサー
    • CGI
  • Perlのモジュールについて

    perlで自作モジュールを作成したいのですが、どのように作成したらよいのでしょうか? 単にPackegae [モジュール名]; sub test{ ... } で Test.pmとすれば、モジュールとして使えますか? カレントディレクトリにrequire 'Test.pm'; とするとエラーになります。 あと、Perlだけで書いたモジュールとXS?で記述したモジュールは 基本的に同じものでしょうか?

    • ベストアンサー
    • Perl
  • この意味を教えて下さい。

    よく、CGIを見ていると始めのほうにこのような行があるのですが、 これはどうゆう意味があるのでしょうか? if ($FORM{'mode'} eq 'view') { &view;exit; } elsif ($FORM{'mode'} eq 'delete') { &delete; } elsif ($FORM{'mode'} eq 'input') { &input; } また、「$FORM{'mode'} 」の意味も教えていただきたいのですが・・・。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • Excel VBA ステップインが途中で通常実行になってしまう

    VBEでF8キーを一回ずつ押して一行ずつステップインでコードを実行していくと、 Workbooks.openの行を実行した途端、 それ以下のすべての行が通常実行されてしまいます。 すべての行をステップインで実行するにはどうすればよいのでしょうか。 例)Workbooks.Openの行でF8を一回押すと、すべて通常実行されてしまう。   (2行目以下も一行ずつ動作を確認したい) ---- Sub test() Workbooks.Open ("C:\test.xls") Range("A1").Value = 1 Range("A2").Value = 2 Range("A3").Value = 3 End Sub ---- よろしくお願いいたします。

  • Sendkeyでステップイン不能?

    VBAで久しぶりにSendkeyを使おうしたところ、ステップインではキーが送られません。 Excelのメニューのツール>マクロ>マクロのボックスを開き、実行ボタンを押せば旨くいきます。 ところがVBエディター上からF8を押してもセンドキーが実行されません。 VBエディターのメニューのツール>マクロから実行ボタンを押しても同じ失敗が起きます。 VBエディターの問題でしょうか? Sub test() Shell "Notepad.exe", 1 SendKeys "A" SendKeys "B" SendKeys "C" End Sub                Excel 2003                WindowsXP sp2

  • perl-cgiのサイズと実行速度について

    perl-cgiのサイズと実行速度について 下記のように、$ENV{'QUERY_STRING'}の値によって、使う、サブルーチンを振り分けているCGIが2つあります。 sub app*は非常に似たような内容で、ひとつの大きさが200KB程度あります。 sample1.cgi と sample2.cgi ではサーバのCPU時間にどの程度の影響がありますか? CGIの内部でベンチマークを取得してみたところ、sample2.cgiでは、0.02cpu程度上昇した程度で、大きな差は見られませんでした。 しかし、共有の、レンタルサーバで使う予定ですが、その場合、毎回、200KBのCGIをコンパイルして実行と、毎回、400KBのCGIをコンパイルして実行されるため、ベンチマークでは計りきれないところが心配です。 また、CPU時間に差が出たとしても、それは、無視できる程度の物でしょうか? まったく持って、見当が付きませんので、どなたか、ご存知の方、教えていただけると幸いです。 宜しくお願い致します。 =sample1.cgi============== $qs = $ENV{'QUERY_STRING'}; if($qs eq 1){ &app1(); }else{ &app2(); } sub app1(){ #いろいろ } sub app2(){ #いろいろ } =sample2.cgi============== $qs = $ENV{'QUERY_STRING'}; if($qs eq 1){ &app1(); }elsif($qs eq 2){ &app2(); }elsif($qs eq 3){ &app3(); }else{ &app4(); } sub app1(){ #いろいろ } sub app2(){ #いろいろ } sub app3(){ #いろいろ } sub app4(){ #いろいろ }

  • 変数値に付いて

    数日前からCGIの勉強を始めた素人です。ご教授,よろしくお願いします。 実際のプログラムを見ながらのほうが覚えるだろうと思い、フリーのスクリプトをダウンロードしてきてそれを見ながら勉強しています。 で、つまずきました。 if ($FORM{'action'} eq 'regist') {&regist;} elsif ($FORM('action') eq 'remove') {&remove;} else {&html;} sub html{   if ($FORM{'action'} eq 'remove') { … 1行目で三つに場合分けしているんですよね? で、subはremoveではないとき。 なのにまたその関数の定義の中で、removeがでてくる。 どういうことなのでしょう? 教えてください。 お願いします。   

    • ベストアンサー
    • CGI
  • if ステートメントについて質問

    今ifステートメントについて勉強してるのですが 自分が調べた感じではこのように書いてありました。 If condition Then [statements] [ElseIf condition-n Then [elseifstatements]] . . . [Else [elsestatements]] End If しかし、以前に作った掲示板のメイン処理のあたりを見てみると、↑のようでなく if ($mode eq "howto") { &howto; } elsif ($mode eq "find") { &find; } elsif ($mode eq "usr_del") { &usr_del; } ・ ・ ・ 見たいな感じです。これは今自分が勉強しているところと違うところですか?

    • ベストアンサー
    • Perl