in reply to summarize similar strings

I love problems like this. My solution might not be the most efficient one, but this would be my first attempt:

#!/usr/bin/perl -w use strict; use warnings; my ($Pattern, $c1, $c2) = ''; while( <DATA> ) { /./ or next; chomp; for (my $i = 0; $i < length($_); $i++) { ($c1 = vec($_, $i, 8)) > 32 or next; $c2 = vec($Pattern, $i, 8); $c2 = ($c2 < 33) ? $c1 : $c2; vec($Pattern, $i, 8) = ($c1 == $c2) ? $c1 : 42; } print "\n INPUT = |$_|\nPattern = |$Pattern|\n"; } print "\n\nFINAL RESULT:\n\n $Pattern\n"; __DATA__ /b/c/ a/b/cdx0/m2/b4/r_a_c1_4/w a/b/c/p0/m0/b0/r_a_c1_0/q a/b/c/p0/m0/b0/r_a_c1_1/q a/b/c/p0/m0/b0/r_a_c1_2/q a/b/c/p0/m0/b1/r_a_c1_0/q a/b/c/p0/m0/b1/r_a_c1_1/q a/b/c/p0/m0/b1/r_a_c1_2/q a/b/c/p0/m0/b1/r_a_c1_0/q/g/w/t /q w/b/c/p0/m3/b2/r_a_c d/e0/m2/b

Replies are listed 'Best First'.
Re^2: summarize similar strings
by abhay180 (Sexton) on Dec 28, 2019 at 09:03 UTC
    Thanks a lot. As i explained in later post i needed to summarize only when two strings diff'd in a number like b0/b1 to be summarized as b*; if c0 , then it's a different string. Anyways, the solution posted by tybalt89 seems to be perfect for my problem. Thanks again.
Re^2: summarize similar strings
by Anonymous Monk on Dec 28, 2019 at 17:38 UTC
    my ($Pattern, $c1, $c2) = '';
    FYI the above code only initializes $Pattern to an empty string. To init all 3 vars:
    my ($Pattern, $c1, $c2) = ('') x 3;
      Oh, okay. Well, I only wanted to initialize the first variable there. And I was suspecting that that's what my code does. I wasn't sure though. Thank you for confirming that. I never knew I could initialize all three by doing ('') x 3. Thanks! I always learn something new!