I have lines of code with two large arrays (so can't just write it into a hash) which I want to connect with a hash.
For example, $array1[0]
becomes the key and $array2[0]
becomes the value and so on to $array1[150]
,$array2[150]
.
Any ideas how I do this?
To assign that array to a hash element, you'd use either $b{"x"} = [@a] or $b{"x"} = \@a , depending on what you're trying to do. [@a] makes a new arrayref containing a copy of the current contents of @a . If the contents of @a change after that, it has no effect on $b{x} .
#!/usr/bin/perl use Data::Dumper; my %hash = (); my @fields = ('currency_symbol', 'currency_name'); my @array = ('BRL','Real'); @hash{@array} = @fields x @array; The output is: $VAR1 = 'currency_symbol'; $VAR2 = '22'; $VAR3 = 'currency_name'; $VAR4 = undef; There is obviously something wrong.
You can do it in a single assignment:
my %hash; @hash{@array1} = @array2;
It's a common idiom. From perldoc perldata on slices:
If you're confused about why you use an '@' there on a hash slice instead of a '%', think of it like this. The type of bracket (square or curly) governs whether it's an array or a hash being looked at. On the other hand, the leading symbol ('$' or '@') on the array or hash indicates whether you are getting back a singular value (a scalar) or a plural one (a list).
When I see one of these I see a mental image of a zipper...
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With