If you want to avoid any external modules, you can do this pretty easily by manipulating the symbol table:
BEGIN { my @methods = qw/status deadline chasedate/; for my $method (@methods) { no strict 'refs'; # allow symbolic reference *$method = sub { return $_[0]->{$method} }; } }

There are two tricks here that you might not be familiar with. The first is using the * sigil to manipulate the symbol table. See perldata under the heading "Typeglobs and Filehandles" to learn more about this syntax, and perlmod to learn more about the workings of the symbol table.

The second trick is the creation of a closure. Using the sub { } notation creates an anonymous subroutine that "closes" over any lexical ("my") variables in the scope where it is defined. You can think of this as attaching the variables to the sub so that it can access them whenever it is called. In this case the sub carries the $method variable with it so that it knows which field of the hash to access when it is called. Search for "closure" in perlref to find out more about these.

-- David Irving

In reply to Re: Object methods from hashy structures by dirving
in thread Object methods from hashy structures by jfrm

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.