#!/usr/bin/perl -w
use strict;
sub P {
my($i)=@_;push@_,grep!/[^1-$i]/,map"$i$_",P($_[0]-$i)and$i--while$i;@_
}
for(P(5)){
print "$_\n";
}
__END__
# output is
5
41
32
311
221
2111
11111
####
sub W{map{[split//]}&P}
##
##
sub P{
my$i=my$n=pop;
push@_,grep{!grep{$_>$i}@$_}map{[$i,@$_]}P($n-$i)while$i-->1;
[$n],@_
}