重複したパスを削除(統一)するワンライナー

このエントリで書いたワンライナーを関数にしてみた。
dotfiles/.zshenv at 7d20f5cc14906f5024c5384875cb062f5d316411 · tyru/dotfiles · GitHubより。

    function rmdupenv() {
        if [ $# = 0 ]; then return; fi
        local env="$1"
        local sep="$2"
 
        eval "export $env=$(perl -e 'my ($e, $s) = (shift, shift || q(:)); #\
                                for(split $s, $ENV{$e}) { #\
                                    $h{$_} or $h{$_}=++$i #\
                                } #\
                                $,=$s; #\
                                %h=reverse %h; #\
                                print map { $h{$_} } #\
                                      sort { $a <=> $b } keys %h' \
                            $env $sep)"
    }
 
    rmdupenv PATH
    rmdupenv PERL5LIB