>>152
今北んですがへー、面白そうじゃん、てんで流れも読まず、また今さらですが…

use 5.12.0;
use Data::Dump qw(dump);

my @a = 1..4;

sub fn {
  my ($le, $pv, @ri) = @_;
  defined $pv ? map {[$pv, @$_]} fn([], @$le, @ri) : ([])
    ,
  @ri ? fn([@$le, $pv], @ri) : ()
}

say dump(fn [], @a);

こんなのすぐ出来たよ…てのは嘘で恥ずかしながらうまく行くまで半日ほど考えましたw
ガベージの生成を抑制する、よりperlらしい書き方もあるだろうけど、読みやすさ優先でそこは目をつぶりました。