in reply to Re: Combinations of lists, etc
in thread Combinations of lists to a hash

Nice work, LanX, thank you!
I tried that in a script, getting it to read all the lines of data, and it works perfectly!
Here it is:
#!/usr/bin/perl while (<DATA>) { #($pre, $ranges) = split /=/, $_, 2; ($pre, $ranges, $value) = $_ =~ /^(.+?)=([^ ]+) (.+)$/; $del = "="; @keys = $pre; for $mult (split /:/, $ranges) { @keys = map { $a=$_; map { "$a$del$_" } split /,/, $mu +lt } @keys; $del = ':'; } #@hash{@keys} = ('value2') x @keys; @hash{@keys} = ($value) x @keys; } use Data::Dump 'dd'; dd \%hash; __DATA__ Prefix1=A,B:c,d value1 Prefix2=A:b,c:1,2 value2 Prefix3=A:*:1,2 value3
And the output:
{ "Prefix1=A:c" => "value1", "Prefix1=A:d" => "value1", "Prefix1=B:c" => "value1", "Prefix1=B:d" => "value1", "Prefix2=A:b:1" => "value2", "Prefix2=A:b:2" => "value2", "Prefix2=A:c:1" => "value2", "Prefix2=A:c:2" => "value2", "Prefix3=A:*:1" => "value3", "Prefix3=A:*:2" => "value3", }
If you have any suggested changes to my changes, I'm all ears.
I've also added 4 updates to my original post in case you're interested.  No worries if not. You can ignore update #1.

Replies are listed 'Best First'.
Re^3: Combinations of lists, etc
by LanX (Saint) on Oct 05, 2019 at 01:06 UTC
    That's not my code. You replied to the wrong person/post (and no glob in this one).

    No idea. Sorry.

    Cheers Rolf
    (addicted to the Perl Programming Language :)
    Wikisyntax for the Monastery FootballPerl is like chess, only without the dice

      Sorry LanX - I got mixed up.
      I've updated my last post now with your code.
        Please try to understand how the code works, especially the loop with the two nested maps °

        Your desired changes are trivial then.

        I did the demo in the debugger to help you experiment. Please use strict and warnings when translating into a script.

        We are glad to answer your questions.

        Cheers Rolf
        (addicted to the Perl Programming Language :)
        Wikisyntax for the Monastery FootballPerl is like chess, only without the dice

        °) could also be translated into a 3 level for loop if it's easier to understand for you.