The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#
# $Id: SignatureP.pm 2234 2014-04-08 13:05:14Z gomor $
#
package Net::SinFP3::Input::SignatureP;
use strict;
use warnings;

use base qw(Net::SinFP3::Input);
__PACKAGE__->cgBuildIndices;

use Net::SinFP3::Ext::SP;
use Net::SinFP3::Next::Passive;

use Data::Dumper;

sub new {
   my $self = shift->SUPER::new(
      @_,
   );

   return $self;
}

sub run {
   my $self = shift->SUPER::run(@_) or return;

   # We only have one next object
   $self->last(1);

   my $p = $self->_parseSignatureP();

   return Net::SinFP3::Next::Passive->new(
      global => $self->global,
      sp     => Net::SinFP3::Ext::SP->new(%$p),
   );
}

sub _parseSignatureP {
   my $self = shift;

   my $log = $self->global->log;

   print "Please enter passive signature:\n";
   my @lines = ();
   while (<>) {
      chomp;
      push @lines, $_;
   }

   my $buf = join('', @lines);
   if (! defined($buf) || ! length($buf)) {
      $log->fatal("No input given");
   }

   my ($patternsSP) = $buf =~ m/^.*(?:SP:)?\s*(F.*?W.*?O.*?M.*?S.*?L.*).*?$/s;
   if (! defined($patternsSP) || ! length($patternsSP)) {
      $log->fatal("No passive signature found in given string");
   }

   $log->debug("[$patternsSP]");

   my @patternsSP = split(/\s+/, $patternsSP);

   if (@patternsSP < 5) {
      $log->fatal("patternsSP: ",Dumper(\@patternsSP));
   }

   my $sp = {
      F => $patternsSP[0],
      W => $patternsSP[1],
      O => $patternsSP[2],
      M => $patternsSP[3],
      S => $patternsSP[4],
      L => $patternsSP[5],
   };

   return $sp;
}

1;

__END__

=head1 NAME

Net::SinFP3::Input::SignatureP - takes a passive signature

=head1 SYNOPSIS

   use Net::SinFP3::Input::SignatureP;

=head1 DESCRIPTION

=head1 ATTRIBUTES

=head1 METHODS

=over 4

=item B<new>

Object constructor.

=item B<run>

Run this plugin.

=back

=head1 AUTHOR

Patrice E<lt>GomoRE<gt> Auffret

=head1 COPYRIGHT AND LICENSE

Copyright (c) 2011-2014, Patrice E<lt>GomoRE<gt> Auffret

You may distribute this module under the terms of the Artistic license.
See LICENSE.Artistic file in the source distribution archive.

=cut