サブルーチンの確認

2024/10/7 [09:36:50] (月) 天気

perlで自作したおひとり様ActivityPubサーバーはその後も増築改築をちまちま続けていて、例によってその場での思いつき、やっつけ仕事の現物合わせ仕様で、わけわかめ状態となっている。


Activityを約束事どおりに対応するモジュール(pmファイル)で、いったい何をしてるのか。

もうすでに忘れてる自分がいるので、サブルーチンの洗い出し用にテキトーなスクリプトをでっちあげた。という覚え書きが今回のエントリ。


#!/usr/bin/perl
use strict;
use utf8;
use Encode;
my $f = shift(@ARGV);
if(! -e $f ){
    printf qq{Not Found pm %s\n}, $f;
    exit;
}
open(IN, $f) || die;
my $name; my @buf=<IN>; close(IN);
foreach (@buf){
    if( m!^sub (.+) *\{! ){
        $name->{$1}++;
    }
}
printf qq{sum : %s\n}, scalar( keys %{$name} );
foreach my $sub (sort keys %{$name}){
    my $pm = join(’’, @buf);
    my $cnt = $pm =~ s!$sub!!g; 
    printf qq{%s :\n}, $sub;
    my @called; my $zzz;
    if( $cnt > 1 ){
        my $subname;
        foreach (@buf){
            if(m!^sub (.+) *\{!){
                $subname = $1;
                next;
            }
            if( m!\$self\-\>$sub! && !$zzz->{$subname}++ ){
                push(@called, $subname);
            }
        }
    }
    printf qq{\t%s\n}, join("\t", sort @called);
}

・サブルーチンの総数

・サブルーチンの名前

・サブルーチンを呼び出しているサブルーチン

ぐらい見えれば、そこそこ役に立つかなあ、と。


文字列検索でひっかけてるだけで、signなんかはサブルーチン呼び出しじゃない部分にもヒットする。本当は動かしながらcaller()でチェックするのが確実…だけど、ざっくり見るだけのためにあちこちにcaller()を仕込むのはうっとーしいんで却下。


使い捨てのつもりで書いたスクリプトだけど、思ったよりちゃんと見えるようにしてくれたので自画自賛&エントリとして書き起こし



10/4、ポケモンGOの対人戦GBLでACEに到達。

初期レートが1984で、ACE到達時のレートは2007。GBLで遊んでいて、ずっと継続してACEにたどり着いてたんだけど、前期初めてACEに到達できず、今期もやべえかなあ、と思ってたので、ほっとひと息。

image

まる6年続いているゲームで、まだ全然飽きないのがすげーす。

<<2026/1>>
    123
45678910
11121314151617
18192021222324
25262728293031
検索:

【最近の20件】