------ | get list of files ---- \ ------ | check each file for from address ---- \ ------ | if address matching explode plaintext attachment into outdir ---- \ ------ | scan each exploded plaintext for ... links? ---- \ ------ | add each found link to logfile ---- #### #!/usr/bin/perl -- use strict; use warnings; use MIME::Parser; ... Main( @ARGV ); exit( 0 ); sub Mainsky { ... my @files = get_files( $fromdir ); for my $file ( @files ){ if( matches_adresses_iwant( $file ) ){ informit( "explode_plaintext_fromfile_into( $file, $outdir )" ); explode_plaintext_fromfile_into( $file, $outdir ); my @links = extract_links( $outdir ); if( @links ){ log_links( @links ); } else { informit( "not extract_links( $file )" ); } } else { informit( "not matches_adresses_iwant( $file )" ); } } } sub get_files { ... } sub matches_adresses_iwant { ... } sub extract_links { ... } sub explode_plaintext_fromfile_into { ... } sub log_links { ... } sub informit { print STDOUT @_,"\n" } __END__ #### #!/usr/bin/perl -- use strict; use warnings; use MIME::Parser; ... Main( @ARGV ); exit( 0 ); sub Mainskee { ... my @files = get_files( $fromdir ); for my $file ( @files ){ if( matches_adresses_iwant( $file ) ){ informit( "explode_plaintext_fromfile_into( $file, $outdir )" ); lincon_plaintext_logs( $file, $outdir ); } else { informit( "not matches_adresses_iwant( $file )" ); } } } sub lincon_plaintext_logs { my( $outdir , $file ) = @_; explode_plaintext_fromfile_into( $file, $outdir ); my @links = extract_links( $outdir ); if( @links ){ log_links( @links ); } else { informit( "not extract_links( $file )" ); } } sub get_files { ... } sub matches_adresses_iwant { ... } sub extract_links { ... } sub explode_plaintext_fromfile_into { ... } sub log_links { ... } sub informit { print STDOUT @_,"\n" } __END__ #### #!/usr/bin/perl -- use strict; use warnings; use MIME::Parser; ... Main( @ARGV ); exit( 0 ); sub Maincakes { ... my @files = get_files( $fromdir ); for my $file ( @files ){ iwant_iphone_links( $file ) or iwant_other_links( $file ) or iwant_pancake_links( $file ); } } sub iwant_iphone_links { ...; return $stop_or_keep_going } sub iwant_other_links { ...; return 1 } sub iwant_pancake_links { ...; return 0 } __END__