IsKoukoku() でこれは効くかも...... 最初のデータロードの部分は今

        @FOX_Ro54 = map { [ (split /<>/)[5,6,7] ] } <ADFILE>;

ってなってますが,これを

        @FOX_Ro54 = map {
                my @a = (split /<>/)[5 .. 7];
                eval { no warnings; [qr/$a[0]/, @a[1 .. $#a]]; };
        } <ADFILE>;

のようにすると,ロード時に regex がプリコンパイルされて,その後の処理が軽くなりそう.
さらに,regex のエラートラップもロード時に行って,IsKoukoku() 内では
eval が不要になる,と(ダメポなのだけ除外され,他の正常なのは使われます).
# eval 内でも警告は発生するので no warnings 入れてますが,-w や use warnings してなければ不要です.
安直にテストしてみると,

% perl -we'use strict; use Benchmark; open F, $ARGV[0]; our @thr = <F>; close F; \
open F, $ARGV[1]; @_ = <F>; close F; \
our @rocka = map [(split /<>/)[5 .. 7]], @_; \
our @rockb = map { my @a = (split /<>/)[5 .. 7]; eval { no warnings; [qr/$a[0]/, @a[1 .. $#a]]; }; } @_; \
timethese(1, { a => sub { foreach my $res (@thr) { no warnings; eval { $res =~ /@$_[0]/; } foreach (@rocka); } }, \
b => sub { foreach my $res (@thr) { no warnings; $res =~ /@$_[0]/ foreach (@rockb); } } });' \
alaska/dat/1147437176.dat Rock54Data
Benchmark: timing 1 iterations of a, b...
         a: 42 wallclock secs (41.94 usr +  0.00 sys = 41.94 CPU) @  0.02/s (n=1)
            (warning: too few iterations for a reliable count)
         b: 42 wallclock secs (41.91 usr +  0.01 sys = 41.92 CPU) @  0.02/s (n=1)
            (warning: too few iterations for a reliable count)

% perl -we'use strict; use Benchmark; open F, $ARGV[0]; our @thr = <F>; close F; \
open F, $ARGV[1]; @_ = <F>; close F; \
our @rocka = map [(split /<>/)[5 .. 7]], @_; \
our @rockb = map { my @a = (split /<>/)[5 .. 7]; eval { no warnings; [qr/$a[0]/, @a[1 .. $#a]]; }; } @_; \
timethese(1, { a => sub { foreach my $res (@thr) { no warnings; eval { $res =~ @$_[0]; } foreach (@rocka); } }, \
b => sub { foreach my $res (@thr) { no warnings; $res =~ @$_[0] foreach (@rockb); } } });' \
alaska/dat/1147437176.dat Rock54Data
Benchmark: timing 1 iterations of a, b...
         a: 42 wallclock secs (41.42 usr +  0.02 sys = 41.44 CPU) @  0.02/s (n=1)
            (warning: too few iterations for a reliable count)
         b: 20 wallclock secs (20.25 usr +  0.00 sys = 20.25 CPU) @  0.05/s (n=1)
            (warning: too few iterations for a reliable count)

プリコンパイルしたのを m// 内に入れるとあまり意味ないっぽいですが,
単独で使えば二倍速ぐらいになるらしいと.

ところで,

                        $NG_word_ref->[0] = $matched; return $NG_word_ref;

の部分は

                        return [$matched, @$NG_word_ref[1 .. $#$NG_word_ref]];

のようにしないと,@FOX_Ro54 の中身を改変してしまう悪寒......

削除系呪文の bbsd 対応も行われ雪だるま以外での bbsd 利用への道も開けてきたし,
T-Banana の実験が一段落したら,このあたりもぼちぼちやりましょうってことで.