Reputation: 419
Say I have a hash:
1 => 1
2 => abc
3 => xyz
In Perl, how can I give a string like 211, and get all the possible combinations according to that hash: abc11, 1abc1, 11abc etc...
Upvotes: 0
Views: 268
Reputation: 40142
There are several list permutation modules on CPAN, many in the question linked above: How can I generate all permutations of an array in Perl?
Using the List::Permutor module:
my $template = 211;
my %strings = (
1 => 1,
2 => 'abc',
3 => 'xyz',
);
use List::Permutor ();
my $perm = List::Permutor->new(split //, $template);
my %seen;
while (my @set = $perm->next) {
my $str = join '' => @strings{@set};
say $str unless $seen{$str}++;
}
which prints:
abc11 1abc1 11abc
Do note that you will have problems using bare numbers in your template if you go beyond the keys 0 .. 9
. (does 10
mean 10
or 1,0
...). You should probably change your template to have a record separator.
Upvotes: 4
Reputation:
You could try something like, get the digits from the string, and loop and build the string :
my @digits = ($str =~ /(\d)/g);
my $val;
foreach (@digits) {
# %values holds key/value pairs
$val .= $values{$_};
}
Upvotes: 1