--- trunk/lib/Biblio/Isis.pm 2005/01/07 20:57:56 37 +++ trunk/lib/Biblio/Isis.pm 2006/07/06 20:31:46 45 @@ -4,12 +4,10 @@ use Carp; use File::Glob qw(:globally :nocase); -use Data::Dumper; - BEGIN { use Exporter (); use vars qw ($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS); - $VERSION = 0.11; + $VERSION = 0.14; @ISA = qw (Exporter); #Give a hoot don't pollute, do not export more than needed by default @EXPORT = qw (); @@ -147,10 +145,22 @@ push @must_exist, "fdt" if ($self->{read_fdt}); foreach my $ext (@must_exist) { - croak "missing ",uc($ext)," file in ",$self->{isisdb} unless ($self->{$ext."_file"}); + unless ($self->{$ext."_file"}) { + carp "missing ",uc($ext)," file in ",$self->{isisdb}; + return; + } } - print STDERR "## using files: ",join(" ",@isis_files),"\n" if ($self->{debug}); + if ($self->{debug}) { + print STDERR "## using files: ",join(" ",@isis_files),"\n"; + eval "use Data::Dump"; + + if (! $@) { + *Dumper = *Data::Dump::dump; + } else { + use Data::Dumper; + } + } # if you want to read .FDT file use read_fdt argument when creating class! if ($self->{read_fdt} && -e $self->{fdt_file}) { @@ -199,7 +209,7 @@ read($self->{'fileMST'}, $buff, 4) || croak "can't read NXTMFN from MST: $!"; $self->{'NXTMFN'}=unpack("V",$buff) || croak "NXTNFN is zero"; - print STDERR Dumper($self),"\n" if ($self->{debug}); + print STDERR "## self ",Dumper($self),"\n" if ($self->{debug}); # open files for later open($self->{'fileXRF'}, $self->{xrf_file}) || croak "can't open '$self->{xrf_file}': $!"; @@ -261,7 +271,15 @@ # read XRFMFB abd XRFMFP read($self->{'fileXRF'}, $buff, 4); - my $pointer=unpack("V",$buff) || croak "pointer is null"; + my $pointer=unpack("V",$buff); + if (! $pointer) { + if ($self->{include_deleted}) { + return; + } else { + warn "pointer for MFN $mfn is null\n"; + return; + } + } # check for logically deleted record if ($pointer & 0x80000000) { @@ -390,7 +408,7 @@ my $mfn = shift || croak "need MFN"; - my $rec = $self->fetch($mfn); + my $rec = $self->fetch($mfn) || return; my $out = "0\t$mfn"; @@ -458,13 +476,16 @@ # init record to include MFN as field 000 my $rec = { '000' => [ $mfn ] }; - my $row = $self->fetch($mfn); + my $row = $self->fetch($mfn) || return; foreach my $k (keys %{$row}) { foreach my $l (@{$row->{$k}}) { # filter output - $l = $self->{'hash_filter'}->($l) if ($self->{'hash_filter'}); + if ($self->{'hash_filter'}) { + $l = $self->{'hash_filter'}->($l); + next unless defined($l); + } my $val;