Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:
This is used in the following way:package Iterator_Utils; require Exporter; use base 'Exporter'; @EXPORT_OK = qw(append nextval Iterator imap igrep iterate_function filehandle_iterator list_iterator); %EXPORT_TAGS = ('all' => \@EXPORT_OK); use strict; use warnings; <sub Iterator (&) { return $_[0] } ...
When used like this, the query function returns a value (the value resulting from executing the code inside the Iterator body), instead of the anonymous sub i was expecting. If i declare the Iterator function locally, instead of using the one from the Iterator_Utils module, everything works all right.#!/usr/bin/perl -w package FlatDB::Iterator; require Iterator_Utils; use strict; use warnings; my $FIELDSEP = qr/\s+/; #sub Iterator (&) { return $_[0] } sub query { my $self = shift; my ($field, $value) = @_; my $fieldnum = $self->{FIELDNUM}{uc $field}; return unless(defined($fieldnum)); my $it = $self->{FH}; return Iterator { local $_; while(defined($_=Iterator_Utils::nextval($it))) { my @fields = split($self->{FIELDSEP}); my $fieldval = $fields[$fieldnum]; return $_ if($fieldval eq $value); } return; }; }
Am I missing anything here? Is this the way it should behave?
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Problem with imported function
by Anonymous Monk on Aug 19, 2009 at 13:13 UTC | |
by Anonymous Monk on Aug 19, 2009 at 13:46 UTC |