Greetings wise monks of perl :)

I'm attempting to access package variables dynamically from other packages. My explanation and terminology may not very clear, so here are some code snippets which show what I am attempting to do.

A package which represents a model subclass.

package my::model::subclass; use strict; use warnings; use base qw/my::model/; our %normal = ( top_level_key => { name1 => value1, name2 => value2, }, ); # the rest of the package...
The base model package
package my::model; use strict; use warnings; sub use_subclass_package_var { my ($self, @cols) = @_; my $normal = join '::', ref $self, 'normal'; foreach my $col (@cols) { # # I need help getting the next line to work properly # next unless exists eval { %{$normal{$col}} }; # the rest of the code } }

Example usage:

my $obj = my::model::subclass->new(); $obj->use_subclass_package_var('top_level_key');

So what I am trying to do here in use_subclass_package_var is check for the key $col in the hash %my::model::subclass::normal, i.e. this would be true if ($col eq 'top_level_key').

I came across How to reference variables in another package via keyword names which appears to similiar to my situation, but my monk mojo is not strong enough yet understand it fully.


In reply to Using package variables dynamically by redhotpenguin

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.