#!/usr/local/bin/perl $uudec = "uudecode"; $mimedec = "decode-b"; $Check = 0; foreach $file ( @ARGV ){ if( $file =~ /-[cC]/ || $file =~ /--check/ ){ print "Check Only.\n"; $Check = 1; next; } print "$file ...\t"; open( FILE , $file ); while( ){ if( /^begin/ ){ chomp; /begin \d\d\d (.*)/; &uue( $file , $1 ); last; } elsif( /^Content-Type: multipart/ ){ &mimeb64( $file ); last; } } print "Done.\n"; close( FILE ); } if( -e "tmp" ){ unlink( "tmp" ); }; exit 0; sub uue{ my ( $filename , $dataname ) = @_; print "uuencode : $dataname ...\t"; system ( "$uudec $filename" ) if ( $Check == 0 ); } sub mimeb64{ my ( $filename ) = shift @_; print "MIME "; open( DAT , $filename ); $sep = ''; while( ){ if( /^Content-Type: multipart\/mixed/ ){ print "(multipart)"; /boundary="(.*)"/; $sep = $1; last; } } while( ){ if( /$sep/ ){ while( ){ if( /^Content-Type: image/ ){ print "(in image)"; # イメージデータ /name="(.*)"/; $file = $1; while( ){ if( /^$/ ){ last; } } if( -e "tmp" ){ unlink( "tmp" ); } open( TMP , "> tmp" ); while( ){ if( /$sep/ ){ last; } else { print TMP $_; } } close( TMP ); print ": $file ...\t"; system( "$mimedec < tmp > $file" ) if( $Check == 0 ); } else { # イメージ以外 last; } } } } close( DAT ); }