http://www.perlmonks.org?node_id=83486


in reply to BOfH Random Excuse Generator

This was kinda cute, even though I don't completely understand the deal with DUMMYMODE (in the BOFH mindset, *all* users are dummies, so that should be a design assumption rather than a switch :)). I do have a few suggestions for you:

while (<>) { if ($_ eq /yes/ or /y.*/) { print "\n$word1 $word2 $word3 $word4\n"; exit; } else { exit; } }
Your regex has a little problem. It will match 'y' anywhere in the input, rather than at the beginning of the input string which I think is what you want. Use the ^ assertion to match at the beginning of the string. Also, if you have verified that the user has started his answer with 'y' you don't really need to check explicitly for the string 'yes'.
See also the informative nodes Death to Dot Star! and Do not use diamond for STDIN.
Here's a less-cluttered alternative to your while loop block:
my $ans = <STDIN>; print "\n$word1 $word2 $word3 $word4\n" if ($ans =~ /^y/);
or even:
print "\n$word1 $word2 $word3 $word4\n" if (($ans = <STDIN>) =~ /^y/);