I am sorry, my earlier posting contained a little error.
The last print statement should read

        print $records[$rec->[0]]->as_usmarc();

Jackie also pointed out that his 001 is alphanumeric.
So he changed the comparision operator from "<=>" (numeric) to "cmp"

The script should have looked like this:

#!/usr/local/bin/perl -w
use strict;
use MARC::Batch;

# sort marc records on field 001
# usage: sort_marc.pl infil.mrc > utfil.mrc

my $batch   = new MARC::Batch( 'USMARC', $ARGV[0] );
my @records = ();
my @f001    = ();
my $idx     = 0;

while ( my $MARC = $batch->next ) {
    push(@records, $MARC);
    push(@f001, [$idx++, $MARC->field("001")->as_string]);
}

foreach my $rec (sort { $a->[1] <=> $b->[1] } @f001) { 
#  for alphanumeric comparision use: foreach my $rec (sort { $a->[1] cmp 
$b->[1] } @f001) {
    print $records[$rec->[0]]->as_usmarc();
}

__END__

Leif

Reply via email to