in reply to Hash Printing Question

Perl chokes on that line because you're trying to use double-quotes inside a double-quoted string. To Perl, this is one string: "name is ${input_queue}{" and this is another string: "}\n".

Here are several different ways to do what you're trying to do:

  1. Use single quotes on the hash key.
    print "name is ${input_queue}{'name'}\n";
  2. Don't use any quotes on the hash key.
    print "name is ${input_queue}{name}\n";
    This works because the key, 'name', is a bareword. It wouldn't work with a key like 'this-is-a-key'.

  3. Use a quoting operator on the string.
    print qq(name is ${input_queue}{"name"}\n);
    qq{} is just like double-quotes, but you get to choose the delimiter.

One last point: the braces around the hash name are optional: $input_queue{name} = "blah";. If you prefer the extra braces, that's okay too.

UPDATE: Please see tye's answer for why ${input_queue}{'name'} doesn't mean the same as $input_queue{'name'} in a double-quoted string.

Replies are listed 'Best First'.
Re: Re: Hash Printing Question
by Albannach (Monsignor) on Dec 01, 2000 at 01:42 UTC
    As a matter of habit I prefer to use single quotes when (I need quotes) just to emphasize that no interpolation is expected (though that should be kind of obvious in this case ;-). For me I think it makes reading the code later a bit easier than defaulting to double quotes everywhere.