local our @results;
/
... The work ...
(?{ push @results, ... })
(?!) # Backtrack to find next result.
/x;
####
perl -e"'abc' =~ /(.+)(?{ print qq{Result: $^N\n} })(?!)/
Result: abc
Result: ab
Result: a
Result: bc
Result: b
Result: c
##
##
#!/usr/bin/perl
use strict;
use warnings;
my $n =($ARGV[0] || 8);
# usage : perl queens.pl n
# ex : perl queens.pl 20
#############
use re 'eval';
my $p=1;
my @s;
local our @r;
my $str;
my $re='_(\d+)!';
for my $i (1..$n) {
for my $j (1..$n) {
$str.= join '!',"_$j",(map {join';',$j-$_<0?0:$j-$_,$j+$_ >$n?0:$j+$_} (1..($n-$i))),'';
}
$str.="\n";
push @s,$p+1,$p+2;
push @r,$p;
$re.=($i==$n)?'':(('(\d+);(\d+)!'x($n-$i)).".*?\n.*?_(?!(?:\\".(join '|\\',@r,@s).')!)(\d+)!');
$p+=2*($n-$i)+1;
$_+=2 for @s;
}
$re .=
'(?{
my $l = "a";
print join",",map{$l++.eval"\$$_"}@r;
print "\n";
})(?!)';
$str=~$re;
##
##
a1,b5,c8,d6,e3,f7,g2,h4
a1,b6,c8,d3,e7,f4,g2,h5
a1,b7,c4,d6,e8,f2,g5,h3
a1,b7,c5,d8,e2,f4,g6,h3
a2,b4,c6,d8,e3,f1,g7,h5
a2,b5,c7,d1,e3,f8,g6,h4
a2,b5,c7,d4,e1,f8,g6,h3
a2,b6,c1,d7,e4,f8,g3,h5
a2,b6,c8,d3,e1,f4,g7,h5
a2,b7,c3,d6,e8,f5,g1,h4
a2,b7,c5,d8,e1,f4,g6,h3
a2,b8,c6,d1,e3,f5,g7,h4
a3,b1,c7,d5,e8,f2,g4,h6
a3,b5,c2,d8,e1,f7,g4,h6
a3,b5,c2,d8,e6,f4,g7,h1
a3,b5,c7,d1,e4,f2,g8,h6
a3,b5,c8,d4,e1,f7,g2,h6
a3,b6,c2,d5,e8,f1,g7,h4
a3,b6,c2,d7,e1,f4,g8,h5
a3,b6,c2,d7,e5,f1,g8,h4
a3,b6,c4,d1,e8,f5,g7,h2
a3,b6,c4,d2,e8,f5,g7,h1
a3,b6,c8,d1,e4,f7,g5,h2
a3,b6,c8,d1,e5,f7,g2,h4
a3,b6,c8,d2,e4,f1,g7,h5
a3,b7,c2,d8,e5,f1,g4,h6
a3,b7,c2,d8,e6,f4,g1,h5
a3,b8,c4,d7,e1,f6,g2,h5
a4,b1,c5,d8,e2,f7,g3,h6
a4,b1,c5,d8,e6,f3,g7,h2
a4,b2,c5,d8,e6,f1,g3,h7
a4,b2,c7,d3,e6,f8,g1,h5
a4,b2,c7,d3,e6,f8,g5,h1
a4,b2,c7,d5,e1,f8,g6,h3
a4,b2,c8,d5,e7,f1,g3,h6
a4,b2,c8,d6,e1,f3,g5,h7
a4,b6,c1,d5,e2,f8,g3,h7
a4,b6,c8,d2,e7,f1,g3,h5
a4,b6,c8,d3,e1,f7,g5,h2
a4,b7,c1,d8,e5,f2,g6,h3
a4,b7,c3,d8,e2,f5,g1,h6
a4,b7,c5,d2,e6,f1,g3,h8
a4,b7,c5,d3,e1,f6,g8,h2
a4,b8,c1,d3,e6,f2,g7,h5
a4,b8,c1,d5,e7,f2,g6,h3
a4,b8,c5,d3,e1,f7,g2,h6
a5,b1,c4,d6,e8,f2,g7,h3
a5,b1,c8,d4,e2,f7,g3,h6
a5,b1,c8,d6,e3,f7,g2,h4
a5,b2,c4,d6,e8,f3,g1,h7
a5,b2,c4,d7,e3,f8,g6,h1
a5,b2,c6,d1,e7,f4,g8,h3
a5,b2,c8,d1,e4,f7,g3,h6
a5,b3,c1,d6,e8,f2,g4,h7
a5,b3,c1,d7,e2,f8,g6,h4
a5,b3,c8,d4,e7,f1,g6,h2
a5,b7,c1,d3,e8,f6,g4,h2
a5,b7,c1,d4,e2,f8,g6,h3
a5,b7,c2,d4,e8,f1,g3,h6
a5,b7,c2,d6,e3,f1,g4,h8
a5,b7,c2,d6,e3,f1,g8,h4
a5,b7,c4,d1,e3,f8,g6,h2
a5,b8,c4,d1,e3,f6,g2,h7
a5,b8,c4,d1,e7,f2,g6,h3
a6,b1,c5,d2,e8,f3,g7,h4
a6,b2,c7,d1,e3,f5,g8,h4
a6,b2,c7,d1,e4,f8,g5,h3
a6,b3,c1,d7,e5,f8,g2,h4
a6,b3,c1,d8,e4,f2,g7,h5
a6,b3,c1,d8,e5,f2,g4,h7
a6,b3,c5,d7,e1,f4,g2,h8
a6,b3,c5,d8,e1,f4,g2,h7
a6,b3,c7,d2,e4,f8,g1,h5
a6,b3,c7,d2,e8,f5,g1,h4
a6,b3,c7,d4,e1,f8,g2,h5
a6,b4,c1,d5,e8,f2,g7,h3
a6,b4,c2,d8,e5,f7,g1,h3
a6,b4,c7,d1,e3,f5,g2,h8
a6,b4,c7,d1,e8,f2,g5,h3
a6,b8,c2,d4,e1,f7,g5,h3
a7,b1,c3,d8,e6,f4,g2,h5
a7,b2,c4,d1,e8,f5,g3,h6
a7,b2,c6,d3,e1,f4,g8,h5
a7,b3,c1,d6,e8,f5,g2,h4
a7,b3,c8,d2,e5,f1,g6,h4
a7,b4,c2,d5,e8,f1,g3,h6
a7,b4,c2,d8,e6,f1,g3,h5
a7,b5,c3,d1,e6,f8,g2,h4
a8,b2,c4,d1,e7,f5,g3,h6
a8,b2,c5,d3,e1,f7,g4,h6
a8,b3,c1,d6,e2,f5,g7,h4
a8,b4,c1,d3,e6,f2,g7,h5