in reply to print lines which are not reverse duplicates

#!/usr/bin/perl # https://perlmonks.org/?node_id=1226286 use strict; use warnings; my %keep; while( <DATA> ) { /(\w+),(\w+),/ or next; $keep{$2, $1} and delete $keep{$2, $1} or $keep{$1, $2} = $_; } print sort values %keep; __DATA__ personA,personB,10 personA,personC,23 personA,personD,43 personB,personA,190 personE,personF,10

Or, of course, the regex version :)

#!/usr/bin/perl # https://perlmonks.org/?node_id=1226286 use strict; use warnings; local $_ = do { local $/, <DATA> }; 1 while s/^(\w+),(\w+),.*\n((?:.*\n)*?)^\2,\1,.*\n/$3/gm; print; __DATA__ personA,personB,10 personA,personC,23 personA,personD,43 personB,personA,190 personE,personF,10

Replies are listed 'Best First'.
Re^2: print lines which are not reverse duplicates
by hippo (Archbishop) on Nov 26, 2018 at 09:39 UTC
    1 while s/^(\w+),(\w+),.*\n((?:.*\n)*?)^\2,\1,.*\n/$3/gm;

    Awesome, as usual. Thanks for all your regex examples which I for one invariably marvel at.

Re^2: print lines which are not reverse duplicates
by Maire (Scribe) on Nov 26, 2018 at 07:59 UTC
    Thank you for this!