#!/usr/bin/perl

use strict;
use warnings;

my $string = "111s11111s11111s";

sub skip_greedy {
    my ($string, $skips) = @_;

    print "Greedy matching, skip $skips - ";

    print $string =~ /^(.*)s(?(?{$skips-- > 0})(*FAIL))/
        ? "$1\n"
        : "no match\n";
}

skip_greedy($string, $_) for (0..3);

sub all_matches {
    my ($string) = @_;

    my @seqs;
    $string =~ /^(.*)s(?{push @seqs, $1})(*FAIL)/;

    my @sorted = sort {length $b <=> length $a} @seqs;

    return @sorted;
}

use Data::Dumper;

print Dumper [ all_matches($string) ];
print Dumper [ all_matches($string) ];