fortune

30分シリーズ、その4。fortuneプログラム。

引数にfortune用のデータを与えるとそこから、適当なやつをピックアップする。

アブラハムの子であるダビデの子、イエス・キリストの系図。
		-- マタイの福音書 1:1
%
アブラハムはイサクの父であり、イサクはヤコブの父、ヤコブはユダとその兄弟たちとの父、
		-- マタイの福音書 1:2
%

というファイルを用意すると、

$ perl fortune.pl bible
アブラハムの子であるダビデの子、イエス・キリストの系図。
		-- マタイの福音書 1:1

となる。

#!/usr/local/bin/env perl # -*- perl -*-
use strict;

my $i=0;
my @fortune;
while(<>){
    chomp;
    if($_ eq '%'){
	$i ++;
    }else{
	$fortune[$i] .= $_."\n";
    }
}
print $fortune[int(rand(@fortune))];
  • ファイルの内容をまとめて読み込んで、splitしたい。でもやり方が分からないから一行づつ読み込んでいる
  • リストコンテキストで読み取ると余計な分割が発生しそうで嫌
  • 文字列比較はeqを使う。うっかり==を使っていた
  • 副作用のないchompが欲しいかも