while(read_cmd()} { eval { $cmd_name=~/^\w+/ or die "invalid command"; my $cmd_class = "MyApp::Command::$command_name"; my $cmd = eval { require $cmd_class; $cmd_class->new }; if ($@) die "unknow command $cmd_name ($@)\n"; $cmd->parse_args(@args) or die "..."; $cmd->run(@args) or die "..."; etc(); }; print $@ if $@; }