Blame examples/closure/UUdecode.pm

Packit 745572
Packit 745572
package Filter::UUdecode ;
Packit 745572
Packit 745572
use Filter::Util::Call ;
Packit 745572
Packit 745572
use strict ;
Packit 745572
use warnings ;
Packit 745572
Packit 745572
our $VERSION = '1.00' ;
Packit 745572
Packit 745572
sub import
Packit 745572
{
Packit 745572
    my($self) = @_ ;
Packit 745572
    my ($count) = 0 ;
Packit 745572
Packit 745572
    filter_add( 
Packit 745572
        sub 
Packit 745572
        {
Packit 745572
            my ($status) ;
Packit 745572
        
Packit 745572
            while (1) {
Packit 745572
        
Packit 745572
	        return $status 
Packit 745572
	            if ($status = filter_read() ) <= 0;
Packit 745572
        
Packit 745572
	        chomp ;
Packit 745572
	        ++ $count ;
Packit 745572
        
Packit 745572
	        # Skip the begin line (if it is there)
Packit 745572
	        ($_ = ''), next if $count == 1 and /^begin/ ;
Packit 745572
        
Packit 745572
	        # is this the last line?
Packit 745572
	        if ($_ eq " " or length $_ <= 1) {
Packit 745572
	            $_ = '' ;
Packit 745572
	            # If there is an end line, skip it too
Packit 745572
                    return $status
Packit 745572
	                if ($status = filter_read() ) <= 0 ;
Packit 745572
                    $_ = "\n" if /^end/ ;
Packit 745572
	            filter_del() ;
Packit 745572
	            return 1 ;
Packit 745572
	        }
Packit 745572
        
Packit 745572
	        # uudecode the line
Packit 745572
	        $_ = unpack("u", $_) ;
Packit 745572
        
Packit 745572
	        # return the uudecoded data
Packit 745572
	        return $status ;
Packit 745572
            }
Packit 745572
        })
Packit 745572
        
Packit 745572
}
Packit 745572
1 ;