Beefy Boxes and Bandwidth Generously Provided by pair Networks
laziness, impatience, and hubris
 
PerlMonks  

having difficulty getting $self back from an _init() function

( #36523=categorized question: print w/ replies, xml ) Need Help??
Contributed by Anonymous Monk on Oct 13, 2000 at 02:07 UTC
Q&A  > object-oriented programming


Description:

I'm working on an object that is complex enough (using XML::Parser to initialize the object) that I broke the initialization into a separate function from the constructor. I've put the initialization function into a block with some package variables and private functions something like this:
sub new
{
  my $self = {};
  bless $self, shift;
  $self->_init();

  return $self;
}

{
  my(%registry,%regattrs)
  ...

  sub _parseStart
  sub _parseEnd
  ...

  sub _init()
  {
    $self = shift;

    parse file....

    $self = { 'modules' => { %registry },
              'site'    => $regattrs{site}
            };
  }

}
The problem is that upon returning from init back in the constructor, $self doesn't seem to be referring to anything anymore, even though i know it's been assigned properly (tested to see if the content was there before exiting _init - it was). Am i having scoping issues? This isn't the first time I've done something like this, but I had no difficulties last time. Thanks much, Stephen

Answer: having difficulty getting $self back from an _init() function
contributed by Fastolfe

In your init function, you are changing $self, creating a new hash reference. This destroys the associations it's had before. If you want to add some items to $self, set them individually:

sub _init { ... $self->{modules} = { %registry }; $self->{site} = $regattrs{site}; ... }
Answer: having difficulty getting $self back from an _init() function
contributed by Anonymous Monk

Thanks. It works fine now. -Stephen

Please (register and) log in if you wish to add an answer



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • 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, 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, 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.
  • Log In?
    Username:
    Password:

    What's my password?
    Create A New User
    Chatterbox?
    and the web crawler heard nothing...

    How do I use this? | Other CB clients
    Other Users?
    Others browsing the Monastery: (8)
    As of 2015-07-30 09:43 GMT
    Sections?
    Information?
    Find Nodes?
    Leftovers?
      Voting Booth?

      The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









      Results (270 votes), past polls