大佬教程收集整理的这篇文章主要介绍了学习高阶Perl:迭代器问题,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
#!/perl use Strict; use warnings; use FindBin qw($Bin); use lib $Bin; use Iterator_Utils qw(:all); use FlatDB; my $db = FlatDB->new("$Bin/db.csv") or die "$!"; my $q = $db->query('STATE','NY'); while (my $rec = NEXTVAL($q) ) { print $rec; }
Iterator_Utils.pm
#!/perl use Strict; use warnings; package Iterator_Utils; use Exporter 'import';; our @EXPORT_OK = qw(NEXTVAL Iterator append imap igrep iterate_function filehandle_iterator list_iterator); our %EXPORT_TAGS = ('all' => \@EXPORT_OK); sub NEXTVAL { $_[0]->() } sub Iterator (&) { return $_[0] }
FlatDB.pm
#!/perl use Strict; use warnings; package FlatDB; my $FIELDSEP = qr/:/; sub new { my $class = shift; my $file = shift; open my $fh,"<",$file or return; chomp(my $scheR_197_11845@a = <$fh>); my @field = split $FIELDSEP,$scheR_197_11845@a; my %fieldnum = map { uc $field[$_] => $_ } (0..$#field); bless { FH => $fh,FIELDS => \@field,FIELDNUM => \%fieldnum,FIELDSEP => $FIELDSEP } => $class; } use Fcntl ':seek'; sub query { my $self = shift; my ($field,$value) = @_; my $fieldnum = $self->{FIELDNUM}{uc $fielD}; return unless defined $fieldnum; my $fh = $self->{FH}; seek $fh,SEEK_SET; <$fh>; # discard scheR_197_11845@a line return Iterator { local $_; while (<$fh>) { chomp; my @fields = split $self->{FIELDSEP},$_,-1; my $fieldval = $fields[$fieldnum]; return $_ if $fieldval eq $value; } return; }; }
db.csv
LASTNAME:FIRSTNAME:CITY:STATE:OWES Adler:David:New York:NY:157.00 Ashton:Elaine:Boston:MA:0.00 Dominus:Mark:Philadelphia:PA:0.00 Orwant:Jon:Cambridge:MA:26.30 Schwern:Michael:New York:NY:149658.23 Wall:Larry:Mountain View:CA:-372.14
就像到目前为止的书一样,对吗?但是我没有得到输出(应该出现Adler和Schwern的字符串).错误消息是:
Can't use String ("Adler:David:New York:NY:157.00") as a subroutIne ref while "Strict refs" in use at N:/Perle/Learn/Iterators/Iterator_Utils.pm line 12,<$fh> line 3.
我究竟做错了什么?
提前致谢!
use Iterator_Utils qw(Iterator);
在包FlatDB之后,该程序将起作用.
非常感谢您发现此错误.我将此添加到the errata on the web site.如果您希望通过名称记入帐户,请将您的姓名发送给我.
以上是大佬教程为你收集整理的学习高阶Perl:迭代器问题全部内容,希望文章能够帮你解决学习高阶Perl:迭代器问题所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。