Problems with MARC::Batch strict_off
[email protected] ("Andy Kohler")
| Newsgroups | perl.perl4lib |
|---|---|
| Message-ID | <[email protected]> |
I'm using MARC-Record-2.0.0, and having problems when batch processing
records with (really) bad data. Batch->strict_off isn't enough:
apparently USMARC.pm's decode() routine calls Field->new, which croaks
(dies), so the warning handling done by Batch->strict_off can't help.
I've attached a test file with 3 records (also at
http://www3.library.ucla.edu/~akohler/test.mrc).
The 2nd record's final field is bad, with tag "v.2":
LDR:00210cv a22001093 4500
001:7999428
004:4295338
005:20070808092304.0
007:ta
008:0705290p 8 4001uueng0000000
852:0 $byr$hPL6201$i.L49 1998
v.2: $a
Simplest code to reproduce:
#!/m1/shared/bin/perl -w
use MARC::Batch;
$batch = MARC::Batch->new('USMARC', $ARGV[0]);
$batch->strict_off();
while ( $record = $batch->next() ) {
print $record->as_formatted();
}
I expected this code to print the good records, #1 and #3; instead,
only #1 prints, then the error: Tag "v.2" is not a valid tag. at ....
File/USMARC.pm line 221
Am I missing a setting which would allow MARC::Batch to process the
entire file, skipping records with bad data? I've searched the
perl4lib archives, but only found messages suggesting strict_off()
should handle this.
For now, I'm working around this by wrapping my calls to batch->next()
in eval, but that's more awkward than I like. Unfortunately, my perl
skills are too meager for me to try hacking a fix into the
MARC::Record modules myself.
Thanks for your help --Andy
test.mrc
(application/octet-stream, 611 B) - not displayed