Here's my version of that, which I wrote for a UnixReview
column but never got around to it...
#!/usr/bin/perl -w
use strict;
use Data::Dumper;
my $info = "dog";
{
try($info);
redo if (yes("play again?"));
}
print "Bye!\n";
print Dumper($info);
sub try {
my $this = $_[0];
if (ref $this) {
return try($this->{yes($this->{Question}) ? 'Yes' : 'No' });
}
if (yes("Is it a $this")) {
print "I got it!\n";
return 1;
};
print "no!? What was it then? ";
chomp(my $new = <STDIN>);
print "And a question that distinguishes a $this from a $new would b
+e? ";
chomp(my $question = <STDIN>);
my $yes = yes("And for a $new, the answer would be...");
$_[0] = {
Question => $question,
Yes => $yes ? $new : $this,
No => $yes ? $this : $new,
};
return 0;
}
sub yes {
print "@_ (yes/no)?";
<STDIN> =~ /^y/i;
}
-- Randal L. Schwartz, Perl hacker