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


in reply to Stumped UPDATED!?!?!

Use a dispatch table.

Replies are listed 'Best First'.
Re^2: Stumped UPDATED!?!?!
by Thelonius (Priest) on Feb 11, 2008 at 05:45 UTC
    For example,
    use strict; use warnings; $| = 1; # auto flush stdout sub more { print "more()\n" } sub fallover { print "fallover()\n" } sub leave { print "Bye!\n"; exit; } my %cmdhash = ( fun => \&more, laugh => \&fallover, exit => \&leave, ); print "Welcome to johns fun house\n"; while (1) { print " : "; my $command=<>; chomp $command; if (my $func = $cmdhash{$command}) { $func->(); } else { print "I'm afraid I don't know how to \"$command\"\n"; } }
      $| = 1; # auto flush stdout

      Why?

        When I ran this without that, I didn't see the prompt or any of the output. I was running ActivePerl 5.8.8 in an rxvt window. If I run cygwin perl, I don't need the $|=1, or if I run either perl in a DOS box, I don't need it. Dunno why.