如何端口代码perl switch-like语句用于5.8

cjd*_*3SD 2 perl perl5.8

我有这个使用perl 5.10的特殊代码(用于类似交换的操作),但是需要让它在5.8上运行.为5.8写这个是什么另一种方式?一种首选方式/技术?

for my $detail ($Details1, $Details2) {
    for (keys %$detail) {
        when ('file') {
            print " File: $detail->{file}{path}\n";
            print "Bytes: $detail->{file}{size}\n";
        }

        when ('directory') {
            given (ref $result->{directory}) {
                when ('ARRAY') {
                    for my $entry (@{$detail->{directory}}) {
                        print "Directory: $entry->{path}\n";
                    }
                }
                when ('HASH') {
                    print "Directory: $detail->{directory}{path}\n";
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Zai*_*aid 7

given/ whens替换if/ elsifs很简单.

for my $detail ( $Details1, $Details2 ) {

    for ( keys %$detail ) {

        if ( $_ eq 'file' ) {

            print " File: $detail->{file}{path}\n";
            print "Bytes: $detail->{file}{size}\n";
        }

        elsif ( $_ eq 'directory' ) {

            if ( ref $result->{directory} eq 'ARRAY' ) {

                for my $entry ( @{$detail->{directory}} ) {
                    print "Directory: $entry->{path}\n";
                }
            }

            if ( ref $result->{directory} eq 'HASH' ) {
                print "Directory: $detail->{directory}{path}\n";
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但我很想用调度表将其重写为匿名潜艇.