in reply to Trying to avoid line noise (brain cramp)
But honestly, you might want to avoid the regex altogether. My solution might be construed as worse line noise, though, but it depends on how you comment it.
Of course, you could split more trickily, but it looks more like line noise then.use warnings; use strict; my (@results, @final, %seen); while(<>){ tr/\0//d; # strip NULs # if we're INSERTing into Photo (but not from)... if (/(?<!from )INSERT INTO Photo/) { # get: BEFORE (INSIDE) AFTER from string my @s = split /[()]/; push @results, [ $s[0], "($s[1])", $s[2] ]; } } # sort by the values in parens @final = sort { $a->[1] cmp $b->[1] } @results; open OUT, ">results.txt" or die $!; for my $line (@final) { my $fieldNames = $line->[1]; # if we've never seen these values, print if (not $seen{$fieldNames}) { print OUT @$line; $seen{$fieldName}++; } } close OUT;
And you could condense the "seen" logic to:# split BEFORE a ( or AFTER a ) my @s = split /(?=\()|(?<=\))/; push @results, \@s; ### that even lets you get away with leaving out @s push @results, [ split /(?=\()|(?<=\))/ ];
But that might be too idiomatic for lazy people to spend time understanding.# display the line if we've never seen the fields print OUT @$line if not $seen{$line->[1]}++;
|
|---|