use warnings;
use strict;
+use Data::Dumper;
use Maasha::Biopieces;
use Maasha::Common;
use Maasha::Patscan;
my ( $options, $in, $out, $record, $keys, $vals_only, $keys_only, $invert,
- $patterns, $regex, %lookup_hash, $key, $op, $val, $found );
+ $patterns, $regex, %lookup_hash, $key, $op, $val, $found, $total, $grabbed );
$options = Maasha::Biopieces::parse_options(
[
}
}
+$total = 0;
+$grabbed = 0;
+
while ( $record = Maasha::Biopieces::get_record( $in ) )
{
$found = 0;
$found = grab_eval( $key, $op, $val, $record );
}
- if ( $found and not $invert ) {
+ if ( $found and not $invert )
+ {
Maasha::Biopieces::put_record( $record, $out );
- } elsif ( not $found and $invert ) {
+ $grabbed += 1;
+ }
+ elsif ( not $found and $invert )
+ {
Maasha::Biopieces::put_record( $record, $out );
+ $grabbed += 1;
}
+
+ $total += 1;
}
Maasha::Biopieces::close_stream( $in );
Maasha::Biopieces::close_stream( $out );
+if ( $options->{ 'verbose' } )
+{
+ print STDERR "Records grabbed: $grabbed\n";
+ print STDERR "Records missed: " . ( $total - $grabbed ) . "\n";
+ print STDERR "Patterns used: " . ( scalar @{$patterns} ) . "\n" if defined $patterns;
+ print STDERR "Patterns used: " . ( scalar keys %lookup_hash ) . "\n" if %lookup_hash;
+}
+
# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> SUBROUTINES <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
if ( $keys )
{
- map { return 1 if exists $lookup_hash->{ $record->{ $_ } } } @{ $keys };
+ map { return 1 if defined $record->{ $_ } and exists $lookup_hash->{ $record->{ $_ } } } @{ $keys };
}
else
{
}
if ( not $keys_only ) {
- map { return 1 if exists $lookup_hash->{ $record->{ $_ } } } keys %{ $record };
+ map { return 1 if defined $record->{ $_ } and exists $lookup_hash->{ $record->{ $_ } } } keys %{ $record };
}
}
# Returns boolean.
- my ( $pattern );
+ my ( $pattern, $key );
foreach $pattern ( @{ $patterns } )
{
if ( $keys )
{
- map { return 1 if index( $record->{ $_ }, $pattern ) >= 0 } @{ $keys };
+ foreach $key ( @{ $keys } )
+ {
+ return 0 if not exists $record->{ $key };
+ return 1 if index( $record->{ $key }, $pattern ) >= 0;
+ }
}
else
{
if ( $keys )
{
- map { return 1 if $record->{ $_ } =~ /$regex/ } @{ $keys };
+ map { return 1 if exists $record->{ $_ } and $record->{ $_ } =~ /$regex/ } @{ $keys };
}
else
{