1 = 1 4 = 1 + 3 9 = 1 + 3 + 5 ... #### use strict; use warnings; use 5.010; for (1..100) { my $str = '1' x $_; my $prev; say $_, ' ', $str =~ m/^(1)(?{$prev=$^N})(?>((??{$prev})11)(?{$prev=$^N}))*$/ ? 'yes' : 'no'; }