[libcatmandu-marc-perl] 193/208: Adding skip_errors option

Jonas Smedegaard dr at jones.dk
Sat Oct 28 03:42:49 UTC 2017


This is an automated email from the git hooks/post-receive script.

js pushed a commit to annotated tag upstream/1.19
in repository libcatmandu-marc-perl.

commit 35a111172031d2faee20d084a20169378200fb3a
Author: Patrick Hochstenbach <patrick.hochstenbach at ugent.be>
Date:   Fri Jul 21 10:44:38 2017 +0200

    Adding skip_errors option
---
 Build.PL                      |   2 +-
 Changes                       |   4 +-
 lib/Catmandu/Exporter/MARC.pm |  73 +++---
 lib/Catmandu/Importer/MARC.pm | 106 ++++----
 t/01-importer.t               |  12 +-
 t/broken.xml                  | 551 ++++++++++++++++++++++++++++++++++++++++++
 6 files changed, 674 insertions(+), 74 deletions(-)

diff --git a/Build.PL b/Build.PL
index 4119588..df4fe1a 100644
--- a/Build.PL
+++ b/Build.PL
@@ -1,5 +1,5 @@
 
-# This file was automatically generated by Dist::Zilla::Plugin::ModuleBuild v6.008.
+# This file was automatically generated by Dist::Zilla::Plugin::ModuleBuild v6.005.
 use strict;
 use warnings;
 
diff --git a/Changes b/Changes
index dc310cd..a05b5a7 100644
--- a/Changes
+++ b/Changes
@@ -1,10 +1,12 @@
 Revision history for Catmandu-MARC
 
 {{$NEXT}}
+  - Adding skip_errors option in the importer and exporter
+  - More POD
 
 1.171  2017-07-13 08:50:35 CEST
   - Fixing 0 as false bug in marc_spec
-  
+
 1.17  2017-07-12 11:45:56 CEST
   - Fixing 0 as false bug when using from/until
   - Fixing double fix execution bug
diff --git a/lib/Catmandu/Exporter/MARC.pm b/lib/Catmandu/Exporter/MARC.pm
index 6543656..35a54b6 100644
--- a/lib/Catmandu/Exporter/MARC.pm
+++ b/lib/Catmandu/Exporter/MARC.pm
@@ -6,6 +6,7 @@ use Moo;
 our $VERSION = '1.171';
 
 has type           => (is => 'ro' , default => sub { 'ISO' });
+has skip_errors    => (is => 'ro');
 has _exporter      => (is => 'ro');
 
 with 'Catmandu::Exporter';
@@ -31,7 +32,20 @@ sub BUILD {
 }
 
 sub add {
-    $_[0]->_exporter->add($_[1]);
+  my ($self) = @_;
+
+  if ($self->skip_errors) {
+    eval {
+      $self->_exporter->add($_[1]);
+    };
+
+    if ($@) {
+      $self->log->error("error at record " . $self->count . " : $@");
+    }
+  }
+  else {
+    $self->_exporter->add($_[1]);
+  }
 }
 
 sub commit {
@@ -48,17 +62,14 @@ Catmandu::Exporter::MARC - Exporter for MARC records
 
 =head1 SYNOPSIS
 
-    # From the command line
-    $ catmandu convert MARC --type ISO to MARC --type XML < /foo/bar.mrc
-
-    # From Perl
-    use Catmandu;
+  # Convert MARC to MARC
+  $ catmandu convert MARC to MARC < /foo/bar.mrc > /foo/output.mrc
 
-    my $importer = Catmandu->importer('MARC', file => "/foo/bar.mrc" , type => 'ISO');
-    my $exporter = Catmandu->exporter('MARC', file => "marc.xml", type => "XML" );
+  # Add fixes
+  $ catmandu convert MARC to MARC --fix myfixes.txt < /foo/bar.mrc > /foo/output.mrc
 
-    $exporter->add($importer);
-    $exporter->commit;
+  # Convert on format to another format
+  $ catmandu convert MARC --type ISO to MARC --type ALEPHSEQ < /foo/bar.mrc > /foo/bar.aleph
 
 =head1 DESCRIPTION
 
@@ -67,38 +78,46 @@ to a file or the standard output.
 
 =head1 CONFIGURATION
 
-In addition to the configuration provided by L<Catmandu::Exporter> (C<file>,
-C<fh>, etc.) the exporter can be configured with the following parameters:
+=over
 
-The 'type' parameter describes the MARC syntax variant. Supported values include:
+=item file
 
-=over
+Write output to a local file given by its path or file handle.  Alternatively a
+scalar reference can be passed to write to a string and a code reference can be
+used to write to a callback function.
 
-=item
+=item fh
 
-ISO: L<Catmandu::Exporter::MARC::ISO> (default)
+Write the output to an L<IO::Handle>. If not specified,
+L<Catmandu::Util::io|Catmandu::Util/IO-functions> is used to create the output
+handle from the C<file> argument or by using STDOUT.
 
-=item
+=item fix
 
-XML: L<Catmandu::Exporter::MARC::XML>
+An ARRAY of one or more fixes or file scripts to be applied to exported items.
 
-=item
+=item type
 
-MARCMaker: L<Catmandu::Exporter::MARC::MARCMaker>
+The MARC format to parse. The following MARC parsers are available:
 
-=item
+  ISO: L<Catmandu::Importer::MARC::ISO> (default) - a strict ISO 2709 exporter
+  ALEPHSEQ: L<Catmandu::Importer::MARC::ALEPHSEQ> - an exporter for Ex Libris Aleph sequential files
+  MARCMaker: L<Catmandu::Importer::MARC::MARCMaker> - an exporter for MARCMaker/MARCBreaker records
+  MiJ: L<Catmandu::Importer::MARC::MiJ> (MARC in JSON) - an export for the MARC-in-JSON format
+  XML: L<Catmandu::Importer::MARC::XML> - an exporter for the MARC XML format
 
-MiJ: L<Catmandu::Exporter::MARC::MiJ> (MARC in JSON)
+=item skip_errors
 
-=item
+If set, then any errors when parsing MARC output will be skipped and ignored. Use the
+debug setting of catmandu to view all error messages:
 
-ALEPHSEQ: L<Catmandu::Exporter::MARC::ALEPHSEQ>
+  $ catmandu -D convert MARC to MARC --skip_errors 1 --fix myfixes.txt < /foo/bar.mrc
 
-=back
+=item <other>
 
-    E.g.
+Every MARC importer can have its own options. Check the documentation of the specific importer.
 
-    catmandu convert MARC --type XML to MARC --type ISO < marc.xml > marc.iso
+=back
 
 =head1 SEE ALSO
 
diff --git a/lib/Catmandu/Importer/MARC.pm b/lib/Catmandu/Importer/MARC.pm
index 7a600ad..1024185 100644
--- a/lib/Catmandu/Importer/MARC.pm
+++ b/lib/Catmandu/Importer/MARC.pm
@@ -6,6 +6,7 @@ use Moo;
 our $VERSION = '1.171';
 
 has type           => (is => 'ro' , default => sub { 'ISO' });
+has skip_errors    => (is => 'ro');
 has _importer      => (is => 'ro');
 
 with 'Catmandu::Importer';
@@ -36,7 +37,27 @@ sub BUILD {
 }
 
 sub generator {
-    $_[0]->_importer->generator;
+    my  ($self) = @_;
+
+    if ($self->skip_errors) {
+      my $gen = $self->_importer->generator;
+      my $nr  = 0;
+      sub {
+        my $item = 0;
+        do {
+          $nr++;
+          try {
+            $item = $gen->();
+          } catch {
+            $self->log->error("error at record $nr : $_");
+          };
+        } while (defined($item) && $item == 0);
+        $item;
+      };
+    }
+    else {
+      $self->_importer->generator;
+    }
 }
 
 1;
@@ -48,27 +69,28 @@ Catmandu::Importer::MARC - Package that imports MARC data
 
 =head1 SYNOPSIS
 
-    use Catmandu;
+    # On the command line
+
+    # Convert MARC to JSON (default)
+    $ catmandu convert MARC < /foo/bar.mrc
 
-    # import records from file
-    my $importer = Catmandu->importer('MARC',file => '/foo/bar.mrc');
+    # Convert MARC to MARC
+    $ catmandu convert MARC to MARC < /foo/bar.mrc > /foo/output.mrc
 
-    my $count = $importer->each(sub {
-        my $record = shift;
-        # ...
-    });
+    # Add fixes
+    $ catmandu convert MARC to MARC --fix myfixes.txt < /foo/bar.mrc > /foo/output.mrc
 
-    # import records and apply a fixer
-    my $fixer = fixer("marc_map('245a','title')");
+    # Create a list of titles
+    $ catmandu convert MARC to TSV --fix "marc_map(245,title); retain(title)" < /foo/bar.mrc
 
-    $fixer->fix($importer)->each(sub {
-        my $record = shift;
-        printf "title: %s\n" , $record->{title};
-    });
+    # Convert MARC XML
+    $ catmandu convert MARC --type XML < /foo/bar.xml
 
-    # Convert MARC to JSON mapping 245a to a title with the L<catmandu> command line client:
+    # Convert ALEPH sequential
+    $ catmandu convert MARC --type ALEPHSEQ < /foo/bar.aleph
 
-    catmandu convert MARC --fix "marc_map('245a','title')" < /foo/bar.mrc
+    # Convert on format to another format
+    $ catmandu convert MARC --type ISO to MARC --type ALEPHSEQ < /foo/bar.mrc > /foo/bar.aleph
 
 =head1 DESCRIPTION
 
@@ -118,52 +140,48 @@ L<Catmandu::Iterable>.
 
 =head1 CONFIGURATION
 
-In addition to the configuration provided by L<Catmandu::Importer> (C<file>,
-C<fh>, etc.) the importer can be configured with the following parameters:
-
-
-The 'type' parameter describes the MARC syntax variant. Supported values include:
-
 =over
 
-=item
-
-ISO: L<Catmandu::Importer::MARC::ISO> (default)
-
-=item
+=item file
 
-MicroLIF: L<Catmandu::Importer::MARC::MicroLIF>
+Read input from a local file given by its path. Alternatively a scalar
+reference can be passed to read from a string.
 
-=item
+=item fh
 
-MARCMaker: L<Catmandu::Importer::MARC::MARCMaker>
+Read input from an L<IO::Handle>. If not specified, L<Catmandu::Util::io> is used to
+create the input stream from the C<file> argument or by using STDIN.
 
-=item
+=item fix
 
-MiJ: L<Catmandu::Importer::MARC::MiJ> (MARC in JSON)
+An ARRAY of one or more fixes or file scripts to be applied to imported items.
 
-=item
+=item type
 
-XML: L<Catmandu::Importer::MARC::XML>
+The MARC format to parse. The following MARC parsers are available:
 
-=item
+  ISO: L<Catmandu::Importer::MARC::ISO> (default) - a strict ISO 2709 parser
+  RAW: L<Catmandu::Importer::MARC::RAW> - a loose ISO 2709 parser that skips faulty records
+  ALEPHSEQ: L<Catmandu::Importer::MARC::ALEPHSEQ> - a parser for Ex Libris Aleph sequential files
+  Lint: L<Catmandu::Importer::MARC::Lint> - a MARC syntax checker
+  MicroLIF: L<Catmandu::Importer::MARC::MicroLIF> - a parser for the MicroLIF format
+  MARCMaker: L<Catmandu::Importer::MARC::MARCMaker> - a parser for MARCMaker/MARCBreaker records
+  MiJ: L<Catmandu::Importer::MARC::MiJ> (MARC in JSON) - a parser for the MARC-in-JSON format
+  XML: L<Catmandu::Importer::MARC::XML> - a parser for the MARC XML format
 
-RAW: L<Catmandu::Importer::MARC::RAW>
+=item skip_errors
 
-=item
+If set, then any errors when parsing MARC input will be skipped and ignored. Use the
+debug setting of catmandu to view all error messages:
 
-Lint: L<Catmandu::Importer::MARC::Lint>
+  $ catmandu -D convert MARC --skip_errors 1 < /foo/bar.mrc
 
-=item
+=item <other>
 
-ALEPHSEQ: L<Catmandu::Importer::MARC::ALEPHSEQ>
+Every MARC importer can have its own options. Check the documentation of the specific importer.
 
 =back
 
-    E.g.
-
-    catmandu convert MARC --type XML to MARC --type ISO < marc.xml > marc.iso
-
 =head1 SEE ALSO
 
 L<Catmandu::Exporter::MARC>
diff --git a/t/01-importer.t b/t/01-importer.t
index 7b1909a..1c1d456 100644
--- a/t/01-importer.t
+++ b/t/01-importer.t
@@ -5,7 +5,7 @@ use warnings;
 
 use Catmandu::Importer::MARC;
 use MARC::File::USMARC;
-use Test::Simple tests => 9;
+use Test::Simple tests => 10;
 
 my $importer = Catmandu::Importer::MARC->new(
     file => 't/camel.mrc',
@@ -43,3 +43,13 @@ $importer = Catmandu::Importer::MARC->new(
 );
 $records = $importer->to_array();
 ok( $records->[0]->{'_id'} eq '2000.', 'got _id from subfield' );
+
+# Test broken records
+$importer = Catmandu::Importer::MARC->new(
+    file => 't/broken.xml',
+    type => "XML",
+    skip_errors => 1,
+);
+$records = $importer->to_array();
+
+ok (@$records == 9, 'skipped one record');
diff --git a/t/broken.xml b/t/broken.xml
new file mode 100644
index 0000000..a972098
--- /dev/null
+++ b/t/broken.xml
@@ -0,0 +1,551 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<marc:collection xmlns:marc="http://www.loc.gov/MARC21/slim">
+  <marc:record>
+    <marc:leader>00755cam  22002414a 4500</marc:leader>
+    <marc:controlfield tag="001">fol05731351 </marc:controlfield>
+    <marc:controlfield tag="003">IMchF</marc:controlfield>
+    <marc:controlfield tag="005">20000613133448.0</marc:controlfield>
+    <marc:controlfield tag="008">000107s2000    nyua          001 0 eng  </marc:controlfield>
+    <marc:datafield tag="010" ind1=" " ind2=" ">
+      <marc:subfield code="a">   00020737 </marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="020" ind1=" " ind2=" ">
+      <marc:subfield code="a">0471383147 (paper/cd-rom : alk. paper)</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="040" ind1=" " ind2=" ">
+      <marc:subfield code="a">DLC</marc:subfield>
+      <marc:subfield code="c">DLC</marc:subfield>
+      <marc:subfield code="d">DLC</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="042" ind1=" " ind2=" ">
+      <marc:subfield code="a">pcc</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="050" ind1="0" ind2="0">
+      <marc:subfield code="a">QA76.73.P22</marc:subfield>
+      <marc:subfield code="b">M33 2000</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="082" ind1="0" ind2="0">
+
+    </marc:datafield>
+    <marc:datafield tag="100" ind1="1" ind2=" ">
+      <marc:subfield code="a">Martinsson, Tobias,</marc:subfield>
+      <marc:subfield code="d">1976-</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="245" ind1="1" ind2="0">
+      <marc:subfield code="a">ActivePerl with ASP and ADO /</marc:subfield>
+      <marc:subfield code="c">Tobias Martinsson.</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="260" ind1=" " ind2=" ">
+      <marc:subfield code="a">New York :</marc:subfield>
+      <marc:subfield code="b">John Wiley & Sons,</marc:subfield>
+      <marc:subfield code="c">2000.</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="300" ind1=" " ind2=" ">
+      <marc:subfield code="a">xxi, 289 p. :</marc:subfield>
+      <marc:subfield code="b">ill. ;</marc:subfield>
+      <marc:subfield code="c">23 cm. +</marc:subfield>
+      <marc:subfield code="e">1 computer  laser disc (4 3/4 in.)</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="500" ind1=" " ind2=" ">
+      <marc:subfield code="a">"Wiley Computer Publishing."</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="650" ind1=" " ind2="0">
+      <marc:subfield code="a">Perl (Computer program language)</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="630" ind1="0" ind2="0">
+      <marc:subfield code="a">Active server pages.</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="630" ind1="0" ind2="0">
+      <marc:subfield code="a">ActiveX.</marc:subfield>
+    </marc:datafield>
+  </marc:record>
+  <marc:record>
+    <marc:leader>00647pam  2200241 a 4500</marc:leader>
+    <marc:controlfield tag="001">fol05754809 </marc:controlfield>
+    <marc:controlfield tag="003">IMchF</marc:controlfield>
+    <marc:controlfield tag="005">20000601115601.0</marc:controlfield>
+    <marc:controlfield tag="008">000203s2000    mau           001 0 eng  </marc:controlfield>
+    <marc:datafield tag="010" ind1=" " ind2=" ">
+      <marc:subfield code="a">   00022023 </marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="020" ind1=" " ind2=" ">
+      <marc:subfield code="a">1565926994</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="040" ind1=" " ind2=" ">
+      <marc:subfield code="a">DLC</marc:subfield>
+      <marc:subfield code="c">DLC</marc:subfield>
+      <marc:subfield code="d">DLC</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="042" ind1=" " ind2=" ">
+      <marc:subfield code="a">pcc</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="050" ind1="0" ind2="0">
+      <marc:subfield code="a">QA76.73.P22</marc:subfield>
+      <marc:subfield code="b">D47 2000</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="082" ind1="0" ind2="0">
+      <marc:subfield code="a">005.74</marc:subfield>
+      <marc:subfield code="2">21</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="100" ind1="1" ind2=" ">
+      <marc:subfield code="a">Descartes, Alligator.</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="245" ind1="1" ind2="0">
+      <marc:subfield code="a">Programming the Perl DBI /</marc:subfield>
+      <marc:subfield code="c">Alligator Descartes and Tim Bunce.</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="260" ind1=" " ind2=" ">
+      <marc:subfield code="a">Cmabridge, MA :</marc:subfield>
+      <marc:subfield code="b">O'Reilly,</marc:subfield>
+      <marc:subfield code="c">2000.</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="263" ind1=" " ind2=" ">
+      <marc:subfield code="a">1111</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="300" ind1=" " ind2=" ">
+      <marc:subfield code="a">p. cm.</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="650" ind1=" " ind2="0">
+      <marc:subfield code="a">Perl (Computer program language)</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="650" ind1=" " ind2="0">
+      <marc:subfield code="a">Database management.</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="700" ind1="1" ind2=" ">
+      <marc:subfield code="a">Bunce, Tim.</marc:subfield>
+    </marc:datafield>
+  </marc:record>
+  <marc:record>
+    <marc:leader>00605cam  22002054a 4500</marc:leader>
+    <marc:controlfield tag="001">fol05843555 </marc:controlfield>
+    <marc:controlfield tag="003">IMchF</marc:controlfield>
+    <marc:controlfield tag="005">20000525142739.0</marc:controlfield>
+    <marc:controlfield tag="008">000318s1999    cau      b    001 0 eng  </marc:controlfield>
+    <marc:datafield tag="010" ind1=" " ind2=" ">
+      <marc:subfield code="a">   00501349 </marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="040" ind1=" " ind2=" ">
+      <marc:subfield code="a">DLC</marc:subfield>
+      <marc:subfield code="c">DLC</marc:subfield>
+      <marc:subfield code="d">DLC</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="042" ind1=" " ind2=" ">
+      <marc:subfield code="a">pcc</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="050" ind1="0" ind2="0">
+      <marc:subfield code="a">QA76.73.P22</marc:subfield>
+      <marc:subfield code="b">B763 1999</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="082" ind1="0" ind2="0">
+      <marc:subfield code="a">005.13/3</marc:subfield>
+      <marc:subfield code="2">21</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="100" ind1="1" ind2=" ">
+      <marc:subfield code="a">Brown, Martin C.</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="245" ind1="1" ind2="0">
+      <marc:subfield code="a">Perl :</marc:subfield>
+      <marc:subfield code="b">programmer's reference /</marc:subfield>
+      <marc:subfield code="c">Martin C. Brown.</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="260" ind1=" " ind2=" ">
+      <marc:subfield code="a">Berkeley :</marc:subfield>
+      <marc:subfield code="b">Osborne/McGraw-Hill,</marc:subfield>
+      <marc:subfield code="c">c1999.</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="300" ind1=" " ind2=" ">
+      <marc:subfield code="a">xix, 380 p. ;</marc:subfield>
+      <marc:subfield code="c">22 cm.</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="504" ind1=" " ind2=" ">
+      <marc:subfield code="a">Includes bibliographical references and index.</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="650" ind1=" " ind2="0">
+      <marc:subfield code="a">Perl (Computer program language)</marc:subfield>
+    </marc:datafield>
+  </marc:record>
+  <marc:record>
+    <marc:leader>00579cam  22002054a 4500</marc:leader>
+    <marc:controlfield tag="001">fol05843579 </marc:controlfield>
+    <marc:controlfield tag="003">IMchF</marc:controlfield>
+    <marc:controlfield tag="005">20000525142716.0</marc:controlfield>
+    <marc:controlfield tag="008">000318s1999    caua          001 0 eng  </marc:controlfield>
+    <marc:datafield tag="010" ind1=" " ind2=" ">
+      <marc:subfield code="a">   00502116 </marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="020" ind1=" " ind2=" ">
+      <marc:subfield code="a">0072120002</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="040" ind1=" " ind2=" ">
+      <marc:subfield code="a">DLC</marc:subfield>
+      <marc:subfield code="c">DLC</marc:subfield>
+      <marc:subfield code="d">DLC</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="042" ind1=" " ind2=" ">
+      <marc:subfield code="a">pcc</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="050" ind1="0" ind2="0">
+      <marc:subfield code="a">QA76.73.P22</marc:subfield>
+      <marc:subfield code="b">B762 1999</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="082" ind1="0" ind2="0">
+      <marc:subfield code="a">005.13/3</marc:subfield>
+      <marc:subfield code="2">21</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="100" ind1="1" ind2=" ">
+      <marc:subfield code="a">Brown, Martin C.</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="245" ind1="1" ind2="0">
+      <marc:subfield code="a">Perl :</marc:subfield>
+      <marc:subfield code="b">the complete reference /</marc:subfield>
+      <marc:subfield code="c">Martin C. Brown.</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="260" ind1=" " ind2=" ">
+      <marc:subfield code="a">Berkeley :</marc:subfield>
+      <marc:subfield code="b">Osborne/McGraw-Hill,</marc:subfield>
+      <marc:subfield code="c">c1999.</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="300" ind1=" " ind2=" ">
+      <marc:subfield code="a">xxxv, 1179 p. :</marc:subfield>
+      <marc:subfield code="b">ill. ;</marc:subfield>
+      <marc:subfield code="c">24 cm.</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="650" ind1=" " ind2="0">
+      <marc:subfield code="a">Perl (Computer program language)</marc:subfield>
+    </marc:datafield>
+  </marc:record>
+  <marc:record>
+    <marc:leader>00801nam  22002778a 4500</marc:leader>
+    <marc:controlfield tag="001">fol05848297 </marc:controlfield>
+    <marc:controlfield tag="003">IMchF</marc:controlfield>
+    <marc:controlfield tag="005">20000524125727.0</marc:controlfield>
+    <marc:controlfield tag="008">000518s2000    mau           001 0 eng  </marc:controlfield>
+    <marc:datafield tag="010" ind1=" " ind2=" ">
+      <marc:subfield code="a">   00041664 </marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="020" ind1=" " ind2=" ">
+      <marc:subfield code="a">1565924193</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="040" ind1=" " ind2=" ">
+      <marc:subfield code="a">DLC</marc:subfield>
+      <marc:subfield code="c">DLC</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="042" ind1=" " ind2=" ">
+      <marc:subfield code="a">pcc</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="050" ind1="0" ind2="0">
+      <marc:subfield code="a">QA76.73.P22</marc:subfield>
+      <marc:subfield code="b">G84 2000</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="082" ind1="0" ind2="0">
+      <marc:subfield code="a">005.2/762</marc:subfield>
+      <marc:subfield code="2">21</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="100" ind1="1" ind2=" ">
+      <marc:subfield code="a">Guelich, Scott.</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="245" ind1="1" ind2="0">
+      <marc:subfield code="a">CGI programming with Perl /</marc:subfield>
+      <marc:subfield code="c">Scott Guelich, Shishir Gundavaram & Gunther Birznieks.</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="250" ind1=" " ind2=" ">
+      <marc:subfield code="a">2nd ed., expanded & updated</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="260" ind1=" " ind2=" ">
+      <marc:subfield code="a">Cambridge, Mass. :</marc:subfield>
+      <marc:subfield code="b">O'Reilly,</marc:subfield>
+      <marc:subfield code="c">2000.</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="263" ind1=" " ind2=" ">
+      <marc:subfield code="a">0006</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="300" ind1=" " ind2=" ">
+      <marc:subfield code="a">p. cm.</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="650" ind1=" " ind2="0">
+      <marc:subfield code="a">Perl (Computer program language)</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="650" ind1=" " ind2="0">
+      <marc:subfield code="a">CGI (Computer network protocol)</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="650" ind1=" " ind2="0">
+      <marc:subfield code="a">Internet programming.</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="700" ind1="1" ind2=" ">
+      <marc:subfield code="a">Gundavaram, Shishir.</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="700" ind1="1" ind2=" ">
+      <marc:subfield code="a">Birznieks, Gunther.</marc:subfield>
+    </marc:datafield>
+  </marc:record>
+  <marc:record>
+    <marc:leader>00665nam  22002298a 4500</marc:leader>
+    <marc:controlfield tag="001">fol05865950 </marc:controlfield>
+    <marc:controlfield tag="003">IMchF</marc:controlfield>
+    <marc:controlfield tag="005">20000615103017.0</marc:controlfield>
+    <marc:controlfield tag="008">000612s2000    mau           100 0 eng  </marc:controlfield>
+    <marc:datafield tag="010" ind1=" " ind2=" ">
+      <marc:subfield code="a">   00055759 </marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="020" ind1=" " ind2=" ">
+      <marc:subfield code="a">0596000138</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="040" ind1=" " ind2=" ">
+      <marc:subfield code="a">DLC</marc:subfield>
+      <marc:subfield code="c">DLC</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="042" ind1=" " ind2=" ">
+      <marc:subfield code="a">pcc</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="050" ind1="0" ind2="0">
+      <marc:subfield code="a">QA76.73.P22</marc:subfield>
+      <marc:subfield code="b">P475 2000</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="082" ind1="0" ind2="0">
+      <marc:subfield code="a">005.13/3</marc:subfield>
+      <marc:subfield code="2">21</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="111" ind1="2" ind2=" ">
+      <marc:subfield code="a">Perl Conference 4.0</marc:subfield>
+      <marc:subfield code="d">(2000 :</marc:subfield>
+      <marc:subfield code="c">Monterey, Calif.)</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="245" ind1="1" ind2="0">
+      <marc:subfield code="a">Proceedings of the Perl Conference 4.0 :</marc:subfield>
+      <marc:subfield code="b">July 17-20, 2000, Monterey, California.</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="250" ind1=" " ind2=" ">
+      <marc:subfield code="a">1st ed.</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="260" ind1=" " ind2=" ">
+      <marc:subfield code="a">Cambridge, Mass. :</marc:subfield>
+      <marc:subfield code="b">O'Reilly,</marc:subfield>
+      <marc:subfield code="c">2000.</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="263" ind1=" " ind2=" ">
+      <marc:subfield code="a">0006</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="300" ind1=" " ind2=" ">
+      <marc:subfield code="a">p. cm.</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="650" ind1=" " ind2="0">
+      <marc:subfield code="a">Perl (Computer program language)</marc:subfield>
+      <marc:subfield code="v">Congresses.</marc:subfield>
+    </marc:datafield>
+  </marc:record>
+  <marc:record>
+    <marc:leader>00579nam  22002178a 4500</marc:leader>
+    <marc:controlfield tag="001">fol05865956 </marc:controlfield>
+    <marc:controlfield tag="003">IMchF</marc:controlfield>
+    <marc:controlfield tag="005">20000615102948.0</marc:controlfield>
+    <marc:controlfield tag="008">000612s2000    mau           000 0 eng  </marc:controlfield>
+    <marc:datafield tag="010" ind1=" " ind2=" ">
+      <marc:subfield code="a">   00055770 </marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="020" ind1=" " ind2=" ">
+      <marc:subfield code="a">1565926099</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="040" ind1=" " ind2=" ">
+      <marc:subfield code="a">DLC</marc:subfield>
+      <marc:subfield code="c">DLC</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="042" ind1=" " ind2=" ">
+      <marc:subfield code="a">pcc</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="050" ind1="0" ind2="0">
+      <marc:subfield code="a">QA76.73.P22</marc:subfield>
+      <marc:subfield code="b">B43 2000</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="082" ind1="0" ind2="0">
+      <marc:subfield code="a">005.13/3</marc:subfield>
+      <marc:subfield code="2">21</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="100" ind1="1" ind2=" ">
+      <marc:subfield code="a">Blank-Edelman, David N.</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="245" ind1="1" ind2="0">
+      <marc:subfield code="a">Perl for system administration /</marc:subfield>
+      <marc:subfield code="c">David N. Blank-Edelman.</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="260" ind1=" " ind2=" ">
+      <marc:subfield code="a">Cambridge, Mass. :</marc:subfield>
+      <marc:subfield code="b">O'Reilly,</marc:subfield>
+      <marc:subfield code="c">2000.</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="263" ind1=" " ind2=" ">
+      <marc:subfield code="a">0006</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="300" ind1=" " ind2=" ">
+      <marc:subfield code="a">p. cm.</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="650" ind1=" " ind2="0">
+      <marc:subfield code="a">Perl (Computer program language)</marc:subfield>
+    </marc:datafield>
+  </marc:record>
+  <marc:record>
+    <marc:leader>00661nam  22002538a 4500</marc:leader>
+    <marc:controlfield tag="001">fol05865967 </marc:controlfield>
+    <marc:controlfield tag="003">IMchF</marc:controlfield>
+    <marc:controlfield tag="005">20000615102611.0</marc:controlfield>
+    <marc:controlfield tag="008">000614s2000    mau           000 0 eng  </marc:controlfield>
+    <marc:datafield tag="010" ind1=" " ind2=" ">
+      <marc:subfield code="a">   00055799 </marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="020" ind1=" " ind2=" ">
+      <marc:subfield code="a">0596000278</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="040" ind1=" " ind2=" ">
+      <marc:subfield code="a">DLC</marc:subfield>
+      <marc:subfield code="c">DLC</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="042" ind1=" " ind2=" ">
+      <marc:subfield code="a">pcc</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="050" ind1="0" ind2="0">
+      <marc:subfield code="a">QA76.73.P22</marc:subfield>
+      <marc:subfield code="b">W35 2000</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="082" ind1="0" ind2="0">
+      <marc:subfield code="a">005.13/3</marc:subfield>
+      <marc:subfield code="2">21</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="100" ind1="1" ind2=" ">
+      <marc:subfield code="a">Wall, Larry.</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="245" ind1="1" ind2="0">
+      <marc:subfield code="a">Programming Perl /</marc:subfield>
+      <marc:subfield code="c">Larry Wall, Tom Christiansen & Jon Orwant.</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="250" ind1=" " ind2=" ">
+      <marc:subfield code="a">3rd ed.</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="260" ind1=" " ind2=" ">
+      <marc:subfield code="a">Cambridge, Mass. :</marc:subfield>
+      <marc:subfield code="b">O'Reilly,</marc:subfield>
+      <marc:subfield code="c">2000.</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="263" ind1=" " ind2=" ">
+      <marc:subfield code="a">0007</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="300" ind1=" " ind2=" ">
+      <marc:subfield code="a">p. cm.</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="650" ind1=" " ind2="0">
+      <marc:subfield code="a">Perl (Computer program language)</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="700" ind1="1" ind2=" ">
+      <marc:subfield code="a">Christiansen, Tom.</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="700" ind1="1" ind2=" ">
+      <marc:subfield code="a">Orwant, Jon.</marc:subfield>
+    </marc:datafield>
+  </marc:record>
+  <marc:record>
+    <marc:leader>00603cam  22002054a 4500</marc:leader>
+    <marc:controlfield tag="001">fol05872355 </marc:controlfield>
+    <marc:controlfield tag="003">IMchF</marc:controlfield>
+    <marc:controlfield tag="005">20000706095105.0</marc:controlfield>
+    <marc:controlfield tag="008">000315s1999    njua          001 0 eng  </marc:controlfield>
+    <marc:datafield tag="010" ind1=" " ind2=" ">
+      <marc:subfield code="a">   00500678 </marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="020" ind1=" " ind2=" ">
+      <marc:subfield code="a">013020868X</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="040" ind1=" " ind2=" ">
+      <marc:subfield code="a">DLC</marc:subfield>
+      <marc:subfield code="c">DLC</marc:subfield>
+      <marc:subfield code="d">DLC</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="042" ind1=" " ind2=" ">
+      <marc:subfield code="a">pcc</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="050" ind1="0" ind2="0">
+      <marc:subfield code="a">QA76.73.P22</marc:subfield>
+      <marc:subfield code="b">L69 1999</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="082" ind1="0" ind2="0">
+      <marc:subfield code="a">005.13/3</marc:subfield>
+      <marc:subfield code="2">21</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="100" ind1="1" ind2=" ">
+      <marc:subfield code="a">Lowe, Vincent</marc:subfield>
+      <marc:subfield code="q">(Vincent D.)</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="245" ind1="1" ind2="0">
+      <marc:subfield code="a">Perl programmer's interactive workbook /</marc:subfield>
+      <marc:subfield code="c">Vincent Lowe.</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="260" ind1=" " ind2=" ">
+      <marc:subfield code="a">Upper Saddle River, NJ :</marc:subfield>
+      <marc:subfield code="b">Prentice Hall PTP,</marc:subfield>
+      <marc:subfield code="c">c1999.</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="300" ind1=" " ind2=" ">
+      <marc:subfield code="a">xx, 633 p. :</marc:subfield>
+      <marc:subfield code="b">ill. ;</marc:subfield>
+      <marc:subfield code="c">23 cm.</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="650" ind1=" " ind2="0">
+      <marc:subfield code="a">Perl (Computer program language)</marc:subfield>
+    </marc:datafield>
+  </marc:record>
+  <marc:record>
+    <marc:leader>00696nam  22002538a 4500</marc:leader>
+    <marc:controlfield tag="001">fol05882032 </marc:controlfield>
+    <marc:controlfield tag="003">IMchF</marc:controlfield>
+    <marc:controlfield tag="005">20000707091904.0</marc:controlfield>
+    <marc:controlfield tag="008">000630s2000    cau           001 0 eng  </marc:controlfield>
+    <marc:datafield tag="010" ind1=" " ind2=" ">
+      <marc:subfield code="a">   00058174 </marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="020" ind1=" " ind2=" ">
+      <marc:subfield code="a">0764547291 (alk. paper)</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="040" ind1=" " ind2=" ">
+      <marc:subfield code="a">DLC</marc:subfield>
+      <marc:subfield code="c">DLC</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="042" ind1=" " ind2=" ">
+      <marc:subfield code="a">pcc</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="050" ind1="0" ind2="0">
+      <marc:subfield code="a">QA76.73.P22</marc:subfield>
+      <marc:subfield code="b">F64 2000</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="082" ind1="0" ind2="0">
+      <marc:subfield code="a">005.13/3</marc:subfield>
+      <marc:subfield code="2">21</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="100" ind1="2" ind2=" ">
+      <marc:subfield code="a">Foster-Johnson, Eric.</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="245" ind1="1" ind2="0">
+      <marc:subfield code="a">Cross-platform Perl /</marc:subfield>
+      <marc:subfield code="c">Eric F. Johnson.</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="260" ind1=" " ind2=" ">
+      <marc:subfield code="a">Foster City, CA :</marc:subfield>
+      <marc:subfield code="b">IDG Books Worldwide,</marc:subfield>
+      <marc:subfield code="c">2000.</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="263" ind1=" " ind2=" ">
+      <marc:subfield code="a">0009</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="300" ind1=" " ind2=" ">
+      <marc:subfield code="a">p. cm.</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="500" ind1=" " ind2=" ">
+      <marc:subfield code="a">Includes index.</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="650" ind1=" " ind2="0">
+      <marc:subfield code="a">Perl (Computer program language)</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="650" ind1=" " ind2="0">
+      <marc:subfield code="a">Web servers.</marc:subfield>
+    </marc:datafield>
+    <marc:datafield tag="650" ind1=" " ind2="0">
+      <marc:subfield code="a">Cross-platform software development.</marc:subfield>
+    </marc:datafield>
+  </marc:record>
+</marc:collection>

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-perl/packages/libcatmandu-marc-perl.git



More information about the Pkg-perl-cvs-commits mailing list