in reply to Re^2: How can I count characters between two same substrings in a string where the substring is repeated more than 5 times?
in thread How can I count characters between two same substrings in a string where the substring is repeated more than 5 times?

I'd use split. One of the points of the OP's spec is "repeated more than 5 times". A lot easier to check with split, than the cram it all in a regexp.

Untested:

my @chunks = split /PAT/, $str; shift @chunks unless $str =~ /^PAT/; pop @chunks unless $str =~ /PAT$/; if (@chunks > 4) { say "Lengths: @{[map {length} @chunks]}"; }
  • Comment on Re^3: How can I count characters between two same substrings in a string where the substring is repeated more than 5 times?
  • Download Code

Replies are listed 'Best First'.
Re^4: How can I count characters between two same substrings in a string where the substring is repeated more than 5 times?
by aaron_baugher (Curate) on Dec 09, 2011 at 16:52 UTC

    Since split discards an empty trailing string (but not a leading one), one option would be to add a character to the end that can't be part of the delimiter. Then you can split and take everything except the first and last elements:

    #!/usr/bin/perl use Modern::Perl; my $a = 'catonecattwocatthreecatfourcat'; $a .= ' '; my @w = split /cat/, $a; say "$_ -> " . length($_) for @w[1..@w-2]; one -> 3 two -> 3 three -> 5 four -> 4

    Aaron B.
    My Woefully Neglected Blog, where I occasionally mention Perl.