【Perl】ハッシュで計算結果のキャッシュを作る

Perl

Perlのハッシュを使用して簡単なキャッシュメカニズムを実装する例を紹介します。

サンプルコード

この例では、ある関数(例えば、計算に時間がかかる関数)の結果をキャッシュして、同じ引数でその関数が再び呼び出された場合には、キャッシュから結果を返すようにします。

use strict;
use warnings;

# キャッシュ用のハッシュを用意
my %cache;

# 時間がかかる関数のシミュレーション
sub time_consuming_function {
    my $n = $_[0];   # 引数1
    
    # キャッシュをチェック
    if (exists $cache{$n}) {
        print "キャッシュから: ";
        return $cache{$n}; # キャッシュされた値を返す
    }
    
    # 重い計算をシミュレート(ここでは単純に2乗を計算)
    my $result = $n ** 2;
    sleep(1); # 時間がかかる処理をシミュレート
    
    # 結果をキャッシュに保存
    $cache{$n} = $result;
    
    return $result;
}

# 関数をテスト
for my $i (1, 2, 3, 1, 2, 3) {
    my $start_time = time;
    my $result = time_consuming_function($i);
    my $end_time = time;
    my $duration = $end_time - $start_time;
    print "$i の2乗は $result です (計算時間: $duration 秒)\n";
}

実行結果

1 の2乗は 1 です (計算時間: 1 秒)
2 の2乗は 4 です (計算時間: 1 秒)
3 の2乗は 9 です (計算時間: 1 秒)
キャッシュから: 1 の2乗は 1 です (計算時間: 0 秒)
キャッシュから: 2 の2乗は 4 です (計算時間: 0 秒)
キャッシュから: 3 の2乗は 9 です (計算時間: 0 秒)

解説

このサンプルでは、time_consuming_function 関数が時間がかかる処理をシミュレートしています(実際にはsleep(1);を使って1秒待機しています)。この関数は与えられた数値の2乗を計算し、結果をキャッシュします。同じ数値で関数が再度呼び出された場合、計算をスキップしてキャッシュから結果を返します。

まとめ

本記事では、Perlのハッシュを使用したキャッシュメカニズムの実装方法を紹介しました。同じ計算を繰り返す必要がある場合で、処理時間を短縮したい場合は、キャッシュメカニズムの導入を検討してみてください。

タイトルとURLをコピーしました