Subroutine to call other subroutines
If you can pass in the subroutine it makes the code a lot simpler, you also don't have to deal with an unknown string format as the subroutine itself has been passed in.

sub print_result
{
    my $subroutine = shift;
    &amp;$subroutine( @_ );
}

print_result( \&amp;print_result_text, $arg1, $arg2 )


Otherwise I think I'd go with with a hash of subroutine references. It's easily readable and simple to update.

sub print_result
{
    my %print_hash = ( text =&gt; \&amp;print_result_text,
                        xml =&gt; \&amp;print_result_xml );

    if( exists( $print_hash{ $outformat } ) )
    {
        &amp;{$print_hash{ $outformat }}( @_ );
    }
    else
    {
        printf(STDERR "Error: unsupported output format '%s'\n", $outformat);
    }
}