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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.