my $mode = param('mode'); # Main if (not defined $mode) { # ... } # After upload elsif ($mode eq 'secondstage') { # ... } # Final stage elsif ($mode eq 'finalstage') { # ... } #### sub main { # Main page } sub secondstage { # After upload } sub finalstage { # final stage } sub _invalid { # Output error message: no such mode } my $modes = { '' => \&main, secondstage => \&secondstage, finalstage => \&finalstage, _invalid => \&invalid }; my $mode = param('mode'); $modes->{ exists $modes->{$mode} ? $mode : '_invalid' }->();