Awkで書いて、Rubyでも書いたなら、やっぱりPerlでも例を示さない と(笑)。ということの他に、近日解説予定のハナモゲラ短歌生成CGIで はPerl版を使うことになるので。
1: #! c:/loka/bin/perl 2: 3: MAIN: 4: { 5: $cand = "あいうえおかきくけこさしすせそたちつてとなにぬねの"; 6: $cand .= "はひふへほまみむんもやゆよらりるれろわをん"; 7: $cand .= "がぎぐげござじずぜぞだぢづでどばびぶべぼぱぴぷぺぽゐゑ"; 8: 9: for($n = 0; $n < 5; $n++){ 10: $tanka = tankagen($cand); 11: print $tanka, "\n"; 12: } 13: } 14: 15: sub tankagen 16: { 17: my($cand) = @_; 18: my($tanka, $n); 19: 20: $tanka = ""; 21: for($n = 0; $n < 31; $n++){ 22: $tanka .= tsugi($cand); 23: if($n == 4 || $n == 11 || $n == 16 || $n == 23){ 24: $tanka .= " "; 25: } 26: } 27: $tanka; 28: } 29: 30: sub tsugi 31: { 32: my($cand) = @_; 33: my($nth); 34: 35: $nth = int(rand(length($cand)/2)) * 2; 36: substr($cand, $nth, 2); 37: } 38: 39: # end of file
あれそでろ やはぼどぜすび ざよぬいき ひさすゑむけあ あふられわをす
ぐむはおを ぢづよぬぶずぺ ぴりさんつ びただばゑゑを へとにばいふき
げおあぴな とろごばずやそ ぜもんぺぜ くわへずをれひ しちみづよゑぜ
はすぎやお ざゆさぺさぱご ぬみかぽげ しべでろせすで もしゆずほなれ
げぞじもけ ひどうよぐみく ぺぴるはも ふばねんとゐに ずれそぞばほゆ
Perlの乱数生成手続きrandは、Cの同名のライブラリ関数をもとにし ているのだと思いますが、内部で勝手に種を植えているらしく、srand を呼ばなくても呼び出すたびにそこそこランダムな値を返すようです。
(2002.03.08)
(C) ©Copyright Noboru HIWAMATA (nulpleno). All rights reserved.