Reputation: 1221
I have a hash(%hash) with the following values
test0 something1
test1 something
test2 something
I need to build an array from the keys with the following elements
@test_array = part0_0 part1_0 part2_0
Basically, I have to take testx (key) and replace it as partx_0
Of course, I can easily create the array like the following
my @test_array;
foreach my $keys (keys %hash) {
push(@test_array,$keys);
}
and I will get
@test_array = test0 test1 test2
but what I would like is to get part0_0 instead of test0, part1_0 instead of test1 and part2_0 instead of test2
Upvotes: 5
Views: 21904
Reputation: 67900
Looks like a good time to use the non-destructive /r
option for substitutions.
my @array = map s/^test(\d+)/part${1}_0/r, keys %a;
For perl versions that do not support /r
:
my @array = map { s/^test(\d+)/part${1}_0/; $_ } keys %a:
Upvotes: 7
Reputation: 385657
my @a;
for (keys %hash) {
push @a, 'part' . ( /^test([0-9]+)/ )[0] . '_0';
}
But that just begs for map
to be used.
my @a =
map { 'part' . ( /^test([0-9]+)/ )[0] . '_0' }
keys %hash;
Upvotes: 3