Print

Print


Is there any way I can make my Perl wrapper for yaz-marcdump, below, more
efficient?

I have (yet another) application that takes MARC records as input, parses
them, and indexes them. My indexer(s) want UTF-8 but sometimes my records
are encoded as MARC-8. Consequently, I wrote a subroutine (m2u) that runs
yaz-marcdump with a number of command-line options, traps STDOUT, and
returns the results converted from MARC-8 to UTF-8.


  #!/usr/bin/perl
  
  # define yaz-marcdump;
  use constant YAZ => 'yaz-marcdump -f MARC-8 -t UTF-8 -o marc -l 9=97 ';
  
  # sanity check
  if ( ! $ARGV[ 0 ]) {
  
    print "Usage: $0 path/to/marc\n";
    exit;
  
  }
  
  # do the work (marc-8 to utf-8) and quit
  print &m2u( YAZ, $ARGV[ 0 ] );
  exit;
  
  
  # convert
  sub m2u {
  
    $y = shift;  # yaz stub
    $f = shift;  # file to process
    $r = '';     # return value
    
    # run yaz and trap the output
    open ( C, "$y$f |" ) or die "Can't open converter: $!\n";
    while ( <C> ) { $r = $_ }
    close C;
    
    # done
    return $r;
  
  }


For extra credit, is there anyway I can optimize m2u? For example, is there
anyway to get rid of the while loop and slurp up yaz-marcdump's output in
one go?

-- 
Eric Lease Morgan