} if ( $x =~ m/^Patient/ ) { print "matched here"; last WID; } } print "out of loop"; if ( $obj->has_members ) { dump_members($obj); } } #### $ perl -MO=Deparse test.pl BEGIN { $^W = 1; } sub dump_afp { my $obj = shift @_; my $struct = $obj->struct; my(@keys) = sort(grep((!/^_|^(?:Data|EscapeSequence|ControlCode|Length|CC|(?:Sub)?Type|FlagByte)$/), keys %$struct)); push @keys, 'Data' if exists $$struct{'Data'}; WID: foreach my $key (@keys) { next if ref $$struct{$key}; next unless length($x = $$struct{$key}); if ($obj->ENCODING and grep {$key eq $_;} $obj->ENCODED_FIELDS) { $x = $obj->$key; $x = qq["$x"]; } elsif ($x =~ /[^\w\s]/) { $x = ''; } if ($key eq 'Data') { if ($x =~ /^"(\w|\d|\$)/) { $x =~ s/"|\(|\)//g; if ($x =~ m[^\d\d/\d\d/\d\d\s]) { my(@dateinfo) = split(/\s/, $x, 0); if ($dateinfo[0] =~ m[^\d\d/\d\d/\d\d]) { print ''; print $dateinfo[0]; print "\n"; print ''; print $dateinfo[1]; print "\n"; } } else { if ($x =~ m[^\d\d/\d\d/\d\d]) { print ''; print $x; print "\n"; } if (not $x =~ m[^\d\d/\d\d/\d\d] and $x != 'Patient') { if (not $x =~ /^((\d+)||(\d+,\d+))\.\d\d/) { print ''; print $x; print "\n"; } } } if ($x =~ /^((\d+)||(\d+,\d+))\.\d\d/) { print ''; print $x; print "\n"; } if ($x =~ /^((\$\d+)||(\$\d+,\d+))\.\d\d/) { print ''; print $x; print "\n"; } } } if ($x =~ /^Patient/) { last WID; } } if ($obj->has_members) { dump_members($obj); } } test.pl syntax OK