=head1 VERSION
-Version 0.16
+Version 0.17
=cut
-our $VERSION = '0.16';
+our $VERSION = '0.17';
=head1 SYNOPSIS
if (ref($rec->{$f}) eq 'ARRAY') {
return map {
if (ref($_) eq 'HASH') {
- values %{$_};
+ my $h = $_;
+ if ( defined($h->{subfields}) ) {
+ my $sfs = delete $h->{subfields} || die "no subfields?";
+ my @out;
+ while (@$sfs) {
+ my $sf = shift @$sfs;
+ my $o = shift @$sfs;
+ if ($o == 0 && ref( $h->{$sf} ) ne 'ARRAY' ) {
+ # single element subfields are not arrays
+ push @out, $h->{$sf};
+ } else {
+warn "====> $f $sf $o $#$sfs ", dump( $sfs ), "\n";
+ push @out, $h->{$sf}->[$o];
+ }
+ }
+ return @out;
+ } else {
+ # FIXME this should probably be in alphabetical order instead of hash order
+ values %{$h};
+ }
} else {
$_;
}
use strict;
-use Test::More tests => 153;
+use Test::More tests => 155;
use Test::Exception;
use Cwd qw/abs_path/;
use blib;
[ '900', ' ', ' ', 'a', 'a3', 'a', 'a4', 'b', 'b3', 'c', 'c3', 'a', 'a5', ],
],
);
+
+ test_rule(
+ 'rec1 skips subfields',
+ {
+ '200' => [ {
+ a => [ 'a1', 'a2' ], b => [ 'b1', 'b2' ], c => [ 'c1', 'c2' ],
+ subfields => [ qw/a 0 b 0 a 1 b 1 c 0 c 1/ ],
+ }, {
+ a => [ 'a3', 'a4', 'a5' ], b => 'b3', c => 'c3',
+ subfields => [ qw/a 0 a 1 b 0 c 0 a 2/ ],
+ } ],
+ },
+ qq{
+ rec1(200);
+ },
+ ["a1", "b1", "a2", "b2", "c1", "c2"],
+ );
}