http://www.perlmonks.org?node_id=974899


in reply to Re^2: Find the common beginning substring in an array of strings
in thread Find the common beginning substring in an array of strings

In that case (and also because I'm only now reading this node), there's this based on a common prefix removal whim I had in the past (with partial credits to moritz for tidying up my original code as seen on my scratchpad):
#!/usr/bin/perl use strict; use warnings; my @array_of_test_names = ( 'History - Family History - Suite with Pati +ent - Clinic - Select Remove(-) Icon of Relative. - Clinic', 'History - Family History - Suite with Pati +ent - Clinic - Save after Entering values in all fields - Clinic', 'History - Family History - Suite with Pati +ent - Clinic - Select Add(+) Icon of Relative. - Clinic', 'History - Family History - Suite with Pati +ent - Clinic - Multiple selection of relatives - Clinic', 'History - Family History - Suite with Pati +ent - Clinic - Interaction Checking message not provided if procedure + code is selected - Clinic', 'History - Family History - Suite with Pati +ent - Clinic - Interaction Checking message provided if no procedure +code is selected - Clinic', ); my @second_sample_array = ( 'WorkCenter - List Patients - To check the +items displayed in Filter By combo box', 'WorkCenter - List Patients - To check Filt +er By combo box when no patients are assigned on initial login', 'WorkCenter - List Patients - Order in whic +h patients are displayed', ); sub getleastcommonprefix { my @searcharray = @_; my $common = $searcharray[0]; foreach my $index (1 .. $#searcharray) { $_ = $searcharray[0] . reverse $searcharray[$index]; m/(.*)(.*)(??{quotemeta reverse $1})/s; if (length $1 < length $common) { $common = $1; } } ## end foreach my $index (1 .. $#searcharray) return $common; } ## end sub getleastcommonprefix print 'Common prefix for first sample [' . getleastcommonprefix(@array +_of_test_names) . "]\n"; print 'Common prefix for second sample [' . getleastcommonprefix(@seco +nd_sample_array) . "]\n";
Which gives the following output:
Common prefix for first sample [History - Family History - Suite with +Patient - Clinic - ] Common prefix for second sample [WorkCenter - List Patients - ]