Beefy Boxes and Bandwidth Generously Provided by pair Networks
There's more than one way to do things
 
PerlMonks  

Re: Iterating over *any* thing in Perl

by Abigail-II (Bishop)
on Dec 03, 2002 at 11:32 UTC ( #217178=note: print w/replies, xml ) Need Help??


in reply to Iterating over *any* thing in Perl

There is no such general function. And that's because there's no general way of creating an object. See, unlike normal languages, in Perl you have to do everything yourself when creating objects (which is very non-Perl). Some people use hashrefs or arrayrefs for their objects, and stuff all the attributes in the things the references point to (and those same people will vote '++' for if someone posts a coding guideline saying "Don't use global variables"). The advantage is that you can access the attributes all the time, from everywhere - the same advance as putting all your variables in main:: gives you.

But people preferring lexical variables over global variables; who think that encapsulation is a good thing, who simply think that variables should be appropriately scoped, or that it's nice to be able to inherit a class without having to peek inside it to do it properly, will hide the attributes, making them unaccessable from the outside.

So, no, you cannot do so.

Abigail

Replies are listed 'Best First'.
Re: Re: Iterating over *any* thing in Perl
by jryan (Vicar) on Dec 03, 2002 at 19:19 UTC
    Some people use hashrefs or arrayrefs for their objects, and stuff all the attributes in the things the references point to (and those same people will vote '++' for if someone posts a coding guideline saying "Don't use global variables"). The advantage is that you can access the attributes all the time, from everywhere - the same advance as putting all your variables in main:: gives you.

    What would you recommend should be done instead?

      Some options (in no particular order):

      • Use a proper OO language ;-)
      • Wait for Perl 6
      • Use inside out objects (for me, the neatest discovery from perlmonks so far - ++Abigail-II).
      • Hide your objects implementation behind a proxy object (Class::Delegation is handy for this sort of thing).
      • Document that you use a hash. Document the slot(s) that you use. One idiom that I've seen a few times is to do it as $object->{CLASS_NAME}->{SLOT_NAME}

      Any more for any more?

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://217178]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others lurking in the Monastery: (4)
As of 2021-05-18 08:43 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    Perl 7 will be out ...





    Results (176 votes). Check out past polls.

    Notices?