コード 
#!/usr/bin/perl -w
use strict;
{
    test(type=>'rtl', top=>'test_top');  # 名前付き引数
}
sub test {
    my %defaults = (               # デフォルト値
        top     => 'top module name',
        format  => 'verilog',
        freq    => '300MHz',
        type    => 'netlist',
        reset   => 'neg',
        buswide => '32'
    );
    
    my %subarg = (%defaults, @_);  # ハッシュとしてデフォルトと合わせて引数受け
    
    foreach my $key (sort(keys(%subarg))) {
        print "$key\t-> $subarg{$key}\n";
    }
}
出力 
buswide -> 32         <== デフォルト値
format  -> verilog    <== デフォルト値
freq    -> 300MHz     <== デフォルト値
reset   -> neg        <== デフォルト値
top     -> test_top   <== 変更値
type    -> rtl        <== 変更値
 
           |