RE: Question about MARC::RECORD usage
[email protected] (Bryan Baldus)
| Newsgroups | perl.perl4lib |
|---|---|
| Message-ID | <1F95E99A11EFA541B0BDE754166A8F70C7371D@qbiex.qbi.quality-books.com> |
On Wednesday, May 03, 2006 9:28 AM, Ed @ Go Britain wrote:
>In the 245 record it is
>possible to have numerous $n and $p fields which need to be
>output with formating between the fields.
>
>My knowledge of PERL isn't too good and I'm struggling to know
>how to extract these repeated subfields and place formatting
>between the subfields in the prescribed order $a, $b, $n, $p,
>$c. Both n and p could be repeated several times.
There are times when the proper order would be $a, $n, $p, $b, $c, as well,
aren't there?
>At the moment I take each field into a variable eg
>
>$Field245c = $record->subfield('245','c');
>
>and then output these as follows
>
> if ($Field245c)
> {
> $EntryBody = $EntryBody . " -- " . $Field245c;
> }
>
>However, this approach assigns the first occurance of a
>subfield and I haven't yet discovered a tachnique for
>accessing further subfields.
>
According to the POD in MARC::Field:
"Or if you think there might be more than one you can get all of them by
calling in a list context:
my @subfields = $field->subfield( 'a' );"
Alternatively, get all subfields in the field and parse as needed:
my $field245 = $record->field('245');
my @subfields = $field245->subfields();
while (my $subfield = pop(@subfields)) {
my ($code, $data) = @$subfield;
#do something with data
#or add code and data to array
unshift (@newsubfields, $code, $data);
} # while
###############
I hope this helps,
Bryan Baldus
[email protected]
[email protected]
http://home.inwave.com/eija