http://qs321.pair.com?node_id=11100053


in reply to using hash to compare with string and print the string

Hello Newbie95,

Just a minor note here because you said you are doing your first steps on hashes.

I noticed that you have an array of keys and a hash below. If the hash is not manually defined you can use hash slicing and assign the keys and values in one step to avoid typing everything manually. For example see below:

my @keys = qw(b d a c); my @values = qw(200 100 30 40); my %hash; @hash{@keys} = @values; print Dumper \%hash;

Then simply as fellow Monks demonstrate to you, iterate over the keys and if the key exists print.

#!/usr/bin/perl use strict; use warnings; use Data::Dumper; my @keys = qw(b d a c); my @values = qw(200 100 30 40); my %hash; @hash{@keys} = @values; print Dumper \%hash; foreach my $key (@keys) { if (exists $hash{$key} ) { print "array element: $key = $hash{$key} inside \%hash\n"; } next; } __END__ $ perl test.pl $VAR1 = { 'a' => '30', 'c' => '40', 'b' => '200', 'd' => '100' }; array element: b = 200 inside %hash array element: d = 100 inside %hash array element: a = 30 inside %hash array element: c = 40 inside %hash

Here is the documentation regarding perldata/Slices. In case you want to read a bit more on how to play with them :).

BR / Thanos

Seeking for Perl wisdom...on the process of learning...not there...yet!

Replies are listed 'Best First'.
Re^2: using hash to compare with string and print the string
by WoodyWeaver (Monk) on May 16, 2019 at 13:38 UTC
    I wanted to comment on style here. Notice that hippo writes
    my @array = qw/b d a c/; my %hash = ( a => 200, b => 100, c => 30, d => 40 );
    while Thanos offers
    my @keys = qw(b d a c); my @values = qw(200 100 30 40); my %hash; @hash{@keys} = @values;
    I didn't know this trick with hash slicing, and I appreciate the pointer. It is very helpful to learn new things.

    Stylistically, the latter is smart, the former is pleasant. If I can invoke Henry Koster's _Harvey_, "'In this world, Elwood, you must be oh so smart or oh so pleasant.' Well, for years I was smart. I recommend pleasant. You may quote me." These two aren't identical, I think. Note $hash{'a'} is different in the two samples (30 and 200). There are times when clever is better (more concise, more elegant, more insightful, golfing) and there are times when obvious is better. If I'm just writing for myself, I lean toward clever. But when I'm trying to get something done, or writing for myself in six months, I'm with Elwood.