Perl 処理速度について
ブログを作成し、カテゴリー別に分けたく下記のようなソースを
書きました。
sub category1
{
open(FILE, "<$FILE") or die("error :$!");
eval{ flock(FILE, 1) };
@DATA = <FILE>;
close FILE;
$a = 0;
my @category1 = grep(/,1,/, @DATA);
while (<@category1>) {
$a++;
}
&buffer();
if($start > @DATA) {$start = @DATA;}
$next = $start + 100;
$back = $start - 100;
if ($back < 0) { $back = 0; }
for ($i=$start;$i<$next;$i++){
last if ($i > @category1);
$data = $category1[$i];
&page();
}
}
これの処理速度が遅いのですが、なにか原因はありますでしょうか?
似たような処理で下記のソースの方が、読み込む内容としては多いのですが、
こちらは普通の速度です。
sub diary2017 {
open(FILE, "<diary/diary-2017.txt") or die("error :$!");
eval{ flock(FILE, 1) };
@DATA = <FILE>;
close FILE;
&buffer();
if($start > @DATA) {$start = @DATA;}
$next = $start + 1000;
$back = $start - 1000;
if ($back < 0) { $back = 0; }
for ($i=$start;$i<$next;$i++){
last if ($i > @DATA);
$data = $DATA[$i];
&page();
}
}
カテゴリーのサブルーチンとアーカイブ専用のサブルーチンで違う点といえば
$a = 0;
my @category1 = grep(/,1,/, @DATA);
while (<@category1>) {
$a++;
}
このgrepのとこですが、
これが遅いとすると対処方法はありますか?
※開くファイルはアーカイブは直接名前にしてて、カテゴリーは変数を使ってますが
これは同じです。
補足
シークの問題なら最初は遅く徐々に速くなると思うのですが 終りまで一様に遅いです、またすぐに同じデータを書き込むと 高速になるが別フォルダーだと同様に遅いのはなぜでしょうか?