Perl のTips...
(疑似)ハナモゲラ和歌
(2002.03.08)

概要

 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)

PerlのTipsへ
参考図書へ
コンピューター言語研究所へ
トップページへ
(C) ©Copyright Noboru HIWAMATA (nulpleno). All rights reserved.