Many thanks to David, Bruce and Karl for suggestions - all were helpful! David and Bruce both reminded me that scalar variables can be treated as file handles: open(my $fh, "<", \$xml) or die "Couldn't open file handle: $!"; my $batch = MARC::Batch->new( 'XML', $fh );
I had tried this without luck earlier. David kindly sent a complete example - which worked in isolation, but failed in the context of my program with a frustrating "Couldn't open file handle: Invalid argument" until I realized I'd forgotten the essential "use warnings"... which gave me the frustrating but much more helpful: "Strings with code points over 0xFF may not be mapped into in-memory file handles" A moment with Google found pages like this: https://bugzilla.redhat.com/show_bug.cgi?id=1048324 which helped me realize that the XML I was retrieving from WorldCat really was encoded as UTF-8, which I hadn't accounted for so far. Wrapping my retrieved XML like so: utf8::encode($contents); has resolved the problem, so far at least - have to test more with records with diacritics to be sure. But this helps me move forward. Thanks again! --Andy On Wed, Apr 18, 2018 at 4:25 PM, Andy Kohler <akohler...@gmail.com> wrote: > Hi - > > I'm pulling records from the WorldCat Search API in MARCXML, and need to > convert them to binary MARC for further evaluation, which I'll do via > MARC::Record. > > Problem: Converting from MARCXML via MARC::File::XML seems to require > reading the records from a file. I've already got the XML stored in a > variable, retrieved via LWP::Simple->get(). > > Do I have to write the XML to a file, then read it in again to convert > it? Or am I just missing something obvious? > > I've tried things like: > $xml = get($api_call); # also verified that $xml now contains MARCXML for > 1 or more records > my $batch = MARC::File::XML->in($xml); > while (my $record = $batch->next()) { > print $record; > } > but I get the error: Can't call method "next" on an undefined value > > Thanks --Andy > >