#!/usr/bin/perl

use Unicode::String ;

while (<>) {
        chomp ;
        #push( @result, sprintf( "%33s %s\n", $_, decode( $_ ) ) ) ;
        push( @result, sprintf( "%s\n", imap_utf7_decode( $_ ) ) ) ;
}

print @result ;

# http://cpansearch.perl.org/src/FABPOT/Unicode-IMAPUtf7-2.01/lib/Unicode/IMAPUtf7.pm

sub imap_utf7_decode {
        my ($s) = @_;

        # Algorithm
        # On remplace , par / dans les BASE 64 (, entre & et -)
        # On remplace les &, non suivi d'un - par +
        # On remplace les &- par &
        $s =~ s/&([^,&\-]*),([^,\-&]*)\-/&$1\/$2\-/g;
        $s =~ s/&(?!\-)/\+/g;
        $s =~ s/&\-/&/g;

        return( Unicode::String::utf7( $s )->utf8 ) ;
}
