+
+=head2 last_leader
+
+Returns leader of last record L<fetch>ed
+
+ print $marc->last_leader;
+
+Added in version 0.08 of this module, so if you need it use:
+
+ use MARC::Fast 0.08;
+
+to be sure that it's supported.
+
+=cut
+
+sub last_leader {
+ my $self = shift;
+ return $self->{last_leader};
+}
+
+
+=head2 to_hash
+
+Read record with specified MFN and convert it to hash
+
+ my $hash = $marc->to_hash( $mfn, include_subfields => 1, );
+
+It has ability to convert characters (using C<hash_filter>) from MARC
+database before creating structures enabling character re-mapping or quick
+fix-up of data.
+
+This function returns hash which is like this:
+
+ '200' => [
+ {
+ 'i1' => '1',
+ 'i2' => ' '
+ 'a' => 'Goa',
+ 'f' => 'Valdo D\'Arienzo',
+ 'e' => 'tipografie e tipografi nel XVI secolo',
+ }
+ ],
+
+This method will also create additional field C<000> with MFN.
+
+=cut
+
+sub to_hash {
+ my $self = shift;
+
+ my $mfn = shift || confess "need mfn!";
+
+ my $args = {@_};
+
+ # init record to include MFN as field 000
+ my $rec = { '000' => [ $mfn ] };
+
+ my $row = $self->fetch($mfn) || return;
+
+ foreach my $tag (keys %{$row}) {
+ foreach my $l (@{$row->{$tag}}) {
+
+ # remove end marker
+ $l =~ s/\x1E$//;
+
+ # filter output
+ $l = $self->{'hash_filter'}->($l, $tag) if ($self->{'hash_filter'});
+
+ my $val;
+
+ # has identifiers?
+ ($val->{'i1'},$val->{'i2'}) = ($1,$2) if ($l =~ s/^([01 #])([01 #])\x1F/\x1F/);
+
+ my $sf_usage;
+ my @subfields;
+
+ # has subfields?
+ if ($l =~ m/\x1F/) {
+ foreach my $t (split(/\x1F/,$l)) {
+ next if (! $t);
+ my $f = substr($t,0,1);
+
+ push @subfields, ( $f, $sf_usage->{$f}++ || 0 );
+
+ # repeatable subfiled -- convert it to array
+ if ($val->{$f}) {
+ if ( ref($val->{$f}) ne 'ARRAY' ) {
+ $val->{$f} = [ $val->{$f}, $val ];
+ } else {
+ push @{$val->{$f}}, $val;
+ }
+ }
+ $val->{substr($t,0,1)} = substr($t,1);
+ }
+ $val->{subfields} = [ @subfields ] if $args->{include_subfields};
+ } else {
+ $val = $l;
+ }
+
+ push @{$rec->{$tag}}, $val;
+ }
+ }
+
+ return $rec;
+}
+
+=head2 to_ascii
+
+ print $marc->to_ascii( 42 );
+
+=cut
+
+sub to_ascii {
+ my $self = shift;
+
+ my $mfn = shift || confess "need mfn";
+ my $row = $self->fetch($mfn) || return;
+
+ my $out;
+
+ foreach my $f (sort keys %{$row}) {
+ my $dump = join('', @{ $row->{$f} });
+ $dump =~ s/\x1e$//;
+ $dump =~ s/\x1f/\$/g;
+ $out .= "$f\t$dump\n";
+ }
+
+ return $out;
+}
+