#! /usr/bin/perl # # 縁ある人から名前を一文字ずつもらった名前のリストを出力。 # これで某Cさんの娘さんに勝手に「しみげ」ちゃんという # 名前をつけてあげたら、異様に嫌がられる (^_^; # @buf = ( 'ち げ ん', 'み ち や', # 'さ と み', 'し ん じ', # 'し お り', ); &main('', ($#buf), @buf); exit; sub main { local($o, $v, @t) = @_; local($a) = pop(@t); #print "DD>$a\n"; local(@z) = split(/ +/, $a); local($i); foreach $i ( @z ) { #print "D>$o [$i,$v]\n"; if($v <= 0) { &xprint("$o $i"); } else { &main("$o $i", $v-1, @t); } } } sub xprint { local($zz) = @_; $zz =~ s/^ //; $zz =~ s/ *$//; local(@t) = split(/ +/,$zz); local($z) = $#t; #print "D($z)>" . join(" ", @t) . "\n"; &xprint_sub('', @t); } sub xprint_sub { local($za, @t) = @_; local($i); foreach $i ( 0 .. $#t ) { local($j, $z); foreach $j ( 0 .. $#t ) { next if ($i == $j); $z .= "$t[$j] "; } $z =~ s/ *$//; if($z =~ /./) { &xprint_sub("$za$t[$i] ", split(/[ \t]+/,$z)); } else { local($o) = "$za$t[$i]"; if($X{$o} !~ /./) { print "$o\n"; $X{$o} = 'done.'; } } } }