perlのテキストファイルの読み込み

2012/03/19

逐次処理する場合はまた違うっぽいが、一括読み込みなら、$inがファイルハンドラとすると、下記が早い

my $code = do { local $/; <$in>}

よくありそうな記述だと

my $code;
while(my $line = <$in>)
$code .= $line;
}

これの動作速度を比較する場合は、Benchmark ライブラリのcmptheseを使うのは間違い。


perlで実行時間を比較

2012/03/19

標準ライブラリのBenchmark を使うのが手っ取り早いみたい

use Benchmark qw(cmpthese);
cmpthese( 実行回数, {
    'ラベル1' => \&関数名1 ,
    'ラベル2' => \&関数名2
});

関数自体はブラックボックスだが、具体例でいけば

use Benchmark qw(cmpthese);
cmpthese( 100, {
    'read_data' => \&read_data1 ,
    'read_data2' => \&read_data2
});

を実行すると、下記のような実行結果が表示される

Rate read_data read_data2
read_data 17.5/s — -88%
read_data2 143/s 714% —

1点、注意点がある。
プロセスのCPU使用時間を計測しているので、プロセス間通信やI/O待ちを含むベンチマークについては、cmptheseは正しい結果が出ないかもしれない。


perlで配列のシャッフルする方法

2012/03/19

配列のシャッフル。shuffleとshuffle2と2例。

2の方が、10倍処理が早いけど、ランダムさがあやしい。shuffleの方は、同様に確からしい結果になります。

sub shuffle{
my @new = ();
foreach (0..$#topics) {
my $rand = int(rand(@new + 1));
push(@new, $new[$rand]);
$new[$rand] = $topics[$_];

}
return @new;
}

 

 

sub shuffle2 {
my @list =@_;

for my $i ( 0..$#list ) {
my $rand=int(rand(@list));
my $tmp=$list[$i];
$list[$i]=$list[$rand];
$list[$rand]=$tmp;
}
@list
}


phpinfo()を表示する方法

2011/06/27

?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000

をアドレスの最後に追加するだけでok。効かないところもある。

サーバ側でこの表示を無効にするためには、php.ini に

expose_php = off

と書くと無効になるらしい。

詳しくは、こちらで

PHPのイースターエッグを見つけ出そう