Nice work, AnomalousMonk, thank you!
I tried that in a script, getting it to read all the lines of data, and it works perfectly! See below.
I'm now trying to change it so it handles the 4 updates in my original post. I see it already handles update #1 re the '*'. How does it do that, given that you're using glob?
Below is your code as a full script with my attempted changes to make it process all the data, and to handle updates #3 & #4 commented out because they don't work. Any suggestions on how to get them working? And how to best fit update #2 in to your code?
And how is '' => '}' replacing the line ending? I know \z matches the end, but those empty 'quotes' puzzle me.
#!/usr/bin/perl
use strict;
use warnings;
my %globize = ('=' => '={', ':' => '}:{', '' => '}');
#my %globize = ('?What here?' => '{', ':' => '}:{', '' => '}');
my (@globs, %hash);
while (<DATA>)
{
my ($globule, $value) = split / /;
chomp $value;
$globule =~ s{ ([=:] | \z) }{$globize{$1}}xmsg;
#$globule =~ s{ (\A | : | \z) }{$globize{$1}}xmsg;
print qq{'$globule'}."\n";
@globs = glob $globule;
$hash{$_} = $value for @globs;
}
use Data::Dump; dd \%hash;
__DATA__
Prefix1:A,B:c,d value1=10
Prefix2:A:b,c:1,2 value2=20
Prefix3:A:*:1,2 value3=30
Prefix4:A:*:1,2 value4a=10|value4b=20
Prefix5,Prefix6:A:*:1,7 value5=10
|