in reply to Extracting matches using boundries with regex
Your comment rightly indicates the second if is almost the same as the first one. Usually, one would abstract the common behaviour into a subroutine. Using the name OUTPUT for an input handle is a bit confusing, too (and lexical filehandles are safer than barewords). Here's my take:
#!/usr/bin/perl use warnings; use strict; sub process_column { my ($patient, $column, $fh_out) = @_; if ($column =~ m/\[R\]/) { if (my @vars = $column =~ m/\](.*?)\[/g) { for my $var (@vars) { if ($var !~ /^\s+$/g) { print {$fh_out} "$patient || $var\n"; } } } } } open my $OUTFILE, '<', 'C:/Scripts/TEST/History21.txt' or die "Could not open source file. $!"; open my $NEW_MED, '>', 'C:/Scripts/TEST/History_MED1.txt' or die "Could not open target file. $!"; open my $NEW_SUR, '>', 'C:/Scripts/TEST/History_SUR1.txt' or die "Could not open target file. $!"; my $count = 1; while (my $line = <$OUTFILE>) { my @rows = split /\|\|/, $line; process_column($rows[0], $rows[1], $NEW_MED); process_column($rows[0], $rows[2], $NEW_SUR); $count++; } close $NEW_SUR or die "Cannot close target file: $!"; close $NEW_MED or die "Cannot close target file: $!"; print "COUNT: $count\n";
($q=q:Sq=~/;[c](.)(.)/;chr(-||-|5+lengthSq)`"S|oS2"`map{chr |+ord }map{substrSq`S_+|`|}3E|-|`7**2-3:)=~y+S|`+$1,++print+eval$q,q,a,
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Extracting multiple match with regex
by NewMonk2Perl (Sexton) on Apr 14, 2016 at 19:20 UTC |