Beefy Boxes and Bandwidth Generously Provided by pair Networks
go ahead... be a heretic

Re: Using OO hash

by meraxes (Friar)
on Nov 27, 2007 at 21:53 UTC ( #653383=note: print w/replies, xml ) Need Help??

in reply to Using OO hash

As moritz said, this isn't OO, but the second line will work with one small modification:

print "$BldEnv{TTT2}->{VersionTwo}\n";

Your version didn't work because the first -> was trying to dereference $BldEnv as though it were a reference to a hash. But WAIT! $BldEnv doesn't exist! You declared %BldEnv. Different animal! Despite using the $ sigil to get at hash values, when you added the -> after it, Perl was looking for a SCALAR variable and ignoring the HASH that you defined!

Perl's syntactic sugar allows you to get around derefencing the 'TTT2' hash using ->. As such, the first one is better.

Further to this, you really don't need to do string interpolation... can get a little messy with multi-level data structures. You could just do:

print $BldEnv{TTT2}{VersionTwo},"\n";

That way the variable is easier to see and prevents a number of interpolation pitfalls. If you're feeling adventurous, you could install the Perl6::Say module so you don't have to append that "\n" to the end like so:

use Perl6::Say; say $BldEnv{TTT2}{VersionTwo};

The "\n" is auto-appended by say.

What you should _definately_ always do do is begin each script with:

use strict; use warnings;

This would have thrown an error on your last print statement telling you that you that $BldEnv hadn't been declared, cluing you in that you're doing something wrong.

Happy Perl-ing!

update: expanded on difference between $BldEnv{key} and $BldEnv->{key}.

update the second: fixed errorneous variable naming.


Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://653383]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others pondering the Monastery: (3)
As of 2017-08-23 14:01 GMT
Find Nodes?
    Voting Booth?
    Who is your favorite scientist and why?

    Results (352 votes). Check out past polls.