• ベストアンサー

サブルーチンを探すには?

4万行ほどあるcgiを解読中ですが、サブルーチンだけで数+個あるので、サブルーチンを定義してあるところを探すのが大変です。 &ikeike を選択すると sub ikeikeに手軽にジャンプするにはどういうeditorでどうしたらいいのでしょうか? 秀丸エディタやPerlEditorでは&ルーチンの一覧がでますが、たくさんあるのでその中から見つけるのが大変なのですが..

  • USB99
  • お礼率41% (85/206)
  • Perl
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
noname#144013
noname#144013
回答No.1

こんにちは。 > &ikeike を選択すると sub ikeikeに手軽にジャンプするにはどういうeditorでどうしたらいいのでしょうか? 勘違いでしたら、すみません。 エディタ上の、同一ソース上でサブルーチン本体の定義部分にジャンプしたいということでしょうか? その場合、秀丸エディタの場合ですが、正規表現で検索されては如何でしょうか? ※もし、正規表現の構文等が解らない場合は秀丸エディタのヘルプをご覧下さい。 (もう既に試されている場合は、御免なさい)   <検索パターンの例>     例1: ^[ \t]*sub[ \t]+ikeike[ \t]*({|$)       この例ですと、行頭から "sub ikeike" と記述された個所にヒットします。        ・行頭及び単語の間に、スペースorタブが複数あってもヒットします。        ・また、ルーチン名の後に '{' があるかまたは、行末だった場合にヒットします。     例2: sub ikeike       "sub" と "ルーチン名" の間がスペース1個と決まっているような場合は、正規表現パターンでなくても       単純に、このようなパターンでも良いと思います。 また、複数のルーチンを検索する際に、検索パターンを毎回入力するのが面倒な場合は、秀丸エディタのマクロ機能 を利用して、検索を半自動化する方法もあります。 マクロ利用の際のおおよその手順は、 1)サブルーチン呼び出し個所のルーチン名部分を、カーソルで選択状態(反転表示)にする。 2)作成した検索マクロを実行する。   マクロの処理としては、     ・選択部分の文字列(ルーチン名)を取り出して、正規表現の検索パターンに加工する、         ↓     ・作成した検索パターンで、正規表現による検索を実行する。         ↓     ・検索結果によりメッセージ等を表示する。         ↓     ・マクロ終了   のような流れになるかと思います。 以上が、質問者さんの目的とする内容と違っていた場合は、申し訳ありません。(その際はスルーして下さい) 【補足:秀丸のサンプルマクロ】 参考までに、上記の処理を行う秀丸エディタ用のサンプルマクロを作ってみましたので宜しければ試してみて下さい。 ■使用方法 注)下記記述において、使用されている秀丸エディタの設定(カスタマイズ)等により、メニュー項目及び操作等が   異なる場合がありますので、その際はご使用の環境に合わせて適せん置き換えて下さい。 1)下記のサンプルマクロを、拡張子 .mac として適当な名前を付けて、秀丸エディタがあるフォルダに保存して下さい。 2)秀丸エディタを起動して、メニュー「マクロ」 → 「マクロ登録」   で開いた「マクロ登録」ダイアログで、上記1)で保存したマクロファイルを登録して下さい。   その際、タイトルを適当な名前で登録して下さい。(例: "Perl サブルーチン検索")   ※登録が完了したら、メニュー「マクロ」下に、登録したマクロのタイトルが表示されると思います。 3)続いて秀丸エディタで、Perlのソースを開きます。 4)ソース内のサブルーチンを呼んでいる個所で、ルーチン名をマウスでダブルクリックすると、ルーチン名が   選択状態(反転表示)になると思います。 5)上記4)の状態で、メニュー「マクロ」→「(登録したマクロのタイトル)」 をクリックするとマクロが実行されます。   ◎ルーチン定義が見つかれば、その個所にカーソルが移動し、    "サブルーチン定義が見つかりました。" のメッセージボックスが表示されます。   ◎ルーチン定義が見つからなければ、    "サブルーチン定義はありませんでした。" のメッセージボックスが表示されます。 ■サンプルマクロ 注1)下記ソースには、字下げのために全角スペースを入れています。   ファイルに保存する際は、お手数ですが全角スペースを削除するか、半角スペースorタブに置換してから   保存して下さい。 注2)下記マクロは、最近の秀丸エディタのバージョン(Version 7.00以降)であれば多分動作すると思います。    もし、上手く動作しなかった場合は申し訳ありません。    また、マクロの修正及び機能の追加等を行いたい場合は、ご自身で適当にいじってみていろいろ試して    みて下さい。 //----------------------------------------------------- // 秀丸エディタ用 「Perl サブルーチン定義検索」マクロ Ver 1.0.0 //----------------------------------------------------- FsPerl_main: //変数の初期化 $rtname = ""; $schptn = ""; $mes = ""; //現テキスト&秀丸の設定状態を保存 #save_x = x; #save_y = y;    //カーソル位置のX,Y座標 #save_selecting = selecting;  //選択状態 #save_rectselecting = rectselecting;  //BOX選択状態 #save_seltopx = seltopx; #save_seltopy = seltopy;  //選択範囲の開始X,Y座標 #save_selendx = selendx; #save_selendy = selendy;  //選択範囲の終了X,Y座標 #save_srchopt = searchoption;  //検索フラグの値 $save_srchbuf = searchbuffer;  //検索バッファの内容 //選択文字列があるかチェック if (selecting==0 && rectselecting==0) {   $mes = "サブルーチン名を選択して下さい。";   message $mes;   endmacro; } //選択文字列が複数行でないかチェック if (seltopy != selendy) {   $mes = "単一行内のサブルーチン名を選択して下さい。";   message $mes;   endmacro; } //選択文字列(ルーチン名)を取得 $rtname = gettext( seltopx, seltopy, selendx, selendy, 1 ); //検索パターンを作成(正規表現 "sub xxxxx") $schptn = "^[ \\t]*sub[ \\t]+" + $rtname + "[ \\t]*({|$)"; //選択状態の解除 escape; escapeinselect; //検索実行 searchdown2 $schptn, regular, nocasesense, hilight, loop; if (result) {   //見つかった場合   //検索バッファを再保存   $save_srchbuf = searchbuffer;   //検索結果のメッセージ表示   $mes = "サブルーチン定義が見つかりました。";   beep; message $mes; } else {   //見つからなかった場合   //マクロ実行前のカーソル位置&選択状態を復元   if (#save_rectselecting) {  //マクロ開始前がBOX選択状態だった時     //選択状態の復元     moveto #save_seltopx, #save_seltopy;     beginrect;     moveto #save_selendx, #save_selendy;     //範囲選択モードを解除(範囲選択はそのまま)     endsel;   }   else if (#save_selecting) {  //マクロ開始前が選択状態だった時     //選択状態の復元     moveto #save_seltopx, #save_seltopy;     beginsel;     moveto #save_selendx, #save_selendy;     //範囲選択モードを解除(範囲選択はそのまま)     endsel;   }   //検索結果のメッセージ表示   $mes = "サブルーチン定義はありませんでした。";   beep; message $mes; } //秀丸の検索設定状態を復元 setsearch $save_srchbuf, #save_srchopt;  //検索バッファの内容、検索フラグの値 //マクロ終了 endmacro;

USB99
質問者

お礼

わざわざマクロまで書いていただいてありがとうございました。残念ねがら私の環境では動きませんでしたが、エッセンスだけとりだして copy; setmark; escape; beginclipboardread; $a=getclipboard; $b="sub "+$a; gofiletop; searchdown $b; でSubが定義してある場所へすぐ移動でき、また、マークしたSubを呼んでいるところにもすぐ戻れるようになりました。本当にありがとうございました。

関連するQ&A

  • サブルーチンからサブルーチンを呼び出す

    #平均を求める,サブルーチンを使用 @dat=(1,2,3,4,5,6,7,8,9,10); $mean=&mean(@dat); print "mean="; print $mean; sub mean{ $sum=&sum(@dat); $n=@dat; $mean=$sum/$n; return($mean); } sub sum{ for($i=0;$i<$n;$i++){ $sum+=$dat[$i]; } return($sum); } Perlを勉強し始めたのですがサブルーチンの所で分からない所があるので教えていただけませんか? mean関数(Perlではmeanルーチンなどと呼ぶべきでしょうか?)の中でsum関数を呼び出してデータの合計を$sumに代入したいのですが,この場合だとうまく代入されていないようなのですが,何がよろしくないのでしょうか?

    • ベストアンサー
    • Perl
  • サブルーチンの使い方

    以下のプログラムを解読中ですが、いまいち理解できません。C言語の経験はあるのですが、Perl初心者のため、Perlの文法を中心に、以下のポイントについて教えてください。 (1)この関数で、引数が「&@」となっていますが、この&の意味は「サブルーチン」ということですか?? (2)2行目のmy ($block, @listin) = @_ で各$block, @listinに格納される値を教えてください。「@_」を調べてみたところ、「サブルーチンの引数を代入」とあるのですが、ここでは、map_block(&@)の&@が&blockと@litinに代入されるということですか??そもそも&@とは何でしょうか? (3)4行目のpush @listout, &$block() for (@listin) について、push関数を調べてみたところ、配列の最後尾に値を格納するということですが、&$block() for (@listin) の部分の意味がよくわかりません。どのような値が、配列listoutに格納されるのでしょうか? (解読中のプログラム) 1sub map_block (&@) { 2   my ($block, @listin) = @_; 3 my @listout = (); 4 push @listout, &$block() for (@listin); 5 return @listout; 6}

    • ベストアンサー
    • Perl
  • 秀丸で右側にSECTION名一覧を表示させたい

    秀丸エディタの機能について質問です。 COBOLプログラムの開発で秀丸エディタを使用しております。 元々の機能やプラグイン、マクロなどを使って 画面上左側にプログラム、右側にプログラムのSECTION名一覧を分割表示させ。 右側の一覧上のSECTION名を選択すると左のプログラムが、 対象行にジャンプする(リンク)ということは可能でしょうか? 可能であれば秀丸の操作方法をご教授ください。 よろしくお願い致します。

  • AUTOLOADサブルーチンが実行される条件?

    Perlのコードを動かしながら勉強していて、ふと納得いかない点があったので教えてください。 次のコードを実行すると'0'と表示されます。 Cls->new; package Cls; sub new {bless([])} sub AUTOLOAD {print(0)} つまりAUTOLOADサブルーチンが実行されているようです。 しかし私のコードの中ではAUTOLOADサブルーチンの定義はしているものの、どこからも呼び出していません。 このコードは何も行わずに終了するはずなのですが、そうではありませんでした。 AUTOLOADサブルーチンは、いつ、どこで、何者によって呼び出されるのでしょうか。

    • ベストアンサー
    • Perl
  • 大規模ソフトウェアの解読方法

    200~300行のC言語のソースが100ファイルくらい集まった組み込みのソフトウェアを解読しようとしています。ツールとして持っているのは、秀丸(テキストエディタ)でtagファイルから関数名、struct定義名のブラウズを行う方法くらいです。数日間解読を試みましたが行き詰まっています。このような作業のコツ、要領、有効な他のツールなどを教えてください。よろしくお願いします。

  • こういった文法構造はありうるの?

    # サブルーチンの宣言と定義 sub func { .... } # ここからすぐ下に { がくる { ....(仮にここをA部とします) } このように、サブルーチンの直後に、{ で始まるのは、文法上ありうるのでしょうか? CGIの中の一部です。 ちなみに、localで -wc とかつけて確認するとエラーにはなりません。 この場合、サブルーチン直後のA部は、どのようにプログラムが走るものなのでしょうか。 A部で、サブルーチンを呼んでもいません。 上手く説明できませんが、よろしくお願いします。

    • ベストアンサー
    • Perl
  • 秀丸でフォルダツリーを常に表示しておきたい

    秀丸エディタを使用してホームページを作ろうと思っています。 今まではDreamweaverを使用していましたが重いのでエディタで作業したいのです。 秀丸でDreamweaverと同じようにファイルをサブフォルダまでサイドに階層(?)表示しておいてダブルクリックすればファイルが開くようするにはどうすればよいでしょうか。 特定のフォルダを覚えて、そのフォルダ以下が常に表示になると嬉しいですが、エクスプローラのようにすべてのフォルダが表示でもかまいません。 エクスプローラを別に表示して一覧から秀丸で開いていましたが「Alt+Tab」を何度も押すとPCの挙動が不安定になるようで、秀丸のウィンドウ内でフォルダ一覧を開ければと思います。 環境はWindows2000とXPで、秀丸エディタはver.7.10です。 どうぞよろしくお願いいたします。

  • PHPのソースの追いかけ方

    普段プログラミングやデザインをしないのですが、WordPressでオリジナルデザインを作ってみようと思っています。 秀丸エディタを使っているのですが、ソースを追いかけるのに、かなり時間を使ってしまい短縮出来ないものかと考えています。 Eclipseだと、関数の定義元にすぐジャンプしたり出来るようですが、秀丸エディタなどのエディタで開発されている方達はどのように追いかけているのでしょうか? テーマ独自の関数なのか、WordPress自体で定義されているのか、関数名だけでは分からなかったりと、一つの関数を追いかけるのも苦労しています。なにか良い方法があればと思います。それとも、1ファイルずつ開いて検索を繰り返すのが普通なのでしょうか? なお、Eclipseなどの統合環境はちょっと設定などが面倒で、重いのでなるべく避けています。

    • ベストアンサー
    • PHP
  • このCGIサブルーチンを解説してください。

    http://oshiete1.goo.ne.jp/kotaeru.php3?q=393199 の続きのようなかんじですが…。 下記のコードがわかりません。 おわかりになるかた解説してください。 sub setCookie{ local($tmp, $val); $val = $_[1]; $val =~ s/(\W)/sprintf("%%%02X", unpack("C",$1))/eg; $tmp = "Set-Cookie:"; $tmp . = "$_[0]=$val;"; $tmp . = "expires=Thu, 1-Jan-2030 00:00:00 GMT\n"; return($tmp); } 1行目:サブルーチン名 2行目:$tmp,$valをそれぞれローカル変数に設定。 3行目:? 4行目:$valを16進数から1バイトずつ変換? 5行目:$tmpに"Set-Cookie:"を代入。 6行目:$tmp.に"$_[0]=$val;"を代入。 7行目:$tmp.に"expires=Thu, 1-Jan-2030 00:00:00 GMT\n"を代入。 8行目:? というところまではなんとか解釈したのですが、「?」の部分がわかりません。 Set-Cookieヘッダを作成しているらしいのですが…。

    • ベストアンサー
    • CGI
  • サブとしてのテキストエディタについて

    私は普段使いのテキストエディタとして秀丸エディタを使っているのですが、 秀丸の設定中にその画面を参考にメモなどを取りたいことがあります。 しかしながら設定画面を開いている状態では秀丸エディタを使うことができません。 そんなとき、サブのテキストエディタを使うことになるのですが、 何か良いものがないかなと思いまして。 システムのメモ帳などでも良いのですが、あまりにさっぱりしすぎているというか 最低限、エディタの背景色を変更したり、フォントの選択と文字サイズの変更 できれば、行間なども指定できるものがよいです。 あとは、シンプルで軽いものであるとなお良いです。 あなたがお使いのエディタですとか、何かそのような用途におすすめの テキストエディタがあれば色々教えてください。

専門家に質問してみよう