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