Okay, so here's the whole code. This sub is the one calling the parser:
sub parse {
my $self = shift;
my @opts = @_;
my %opts;
if ( ! @opts || scalar @opts % 2 ) {
$self->COMPLAIN("bad number of arguments.");
return;
}
else {
%opts = @opts;
if ( ! $opts{-format} || ! grep(ucfirst($opts{-format}), @pars
+ers) ) {
$self->COMPLAIN("no valid format specified.");
return;
}
if ( $opts{-file} && ( ! -T $opts{-file} || ! -r $opts{-file}
+) ) {
$self->COMPLAIN("file not found, not a text file, or not r
+eadable");
return;
}
elsif ( ! $opts{-file} && ! $opts{-string} ) {
$self->COMPLAIN("no data source specified.");
return;
}
my $lib = ref $self;
$lib .= '::' . ucfirst($opts{-format});
eval "require $lib";
my $parser = new $lib;
if ( $opts{-file} && $parser->can('from_handle') ) {
open(FH, $opts{-file});
$opts{-handle} = \*FH;
return $parser->from_handle(%opts);
}
if ( $opts{-string} && $parser->can('from_string') ) {
return $parser->from_string(%opts);
}
$self->COMPLAIN("the parser can't handle the data source speci
+fied");
return;
}
}
The call is 9 physical lines from the bottom. And here's the one who gets called:
sub from_handle {
my $self = shift;
my %opts = @_;
my $taxa = new Phylo::Taxa;
my $version = $self->VERSION;
while (<$opts{-handle}>) {
if ( $_ ) {
my $taxon = new Phylo::Taxa::Taxon;
my $date = localtime;
my $description = qq{Read from $opts{-file} using Phylo ve
+rsion $version on $date};
$taxon->name($_);
$taxon->desc($description);
$taxa->insert($taxon);
}
}
return $taxa;
}
And in the second block $_ == GLOB(0xa0bb570). |