From bless:
bless REF,CLASSNAME
...
If CLASSNAME is omitted, the current package is used.
This works OK where there is no inheritance. But (from the same doc):
Always use the two-argument version if a derived class might inherit the function doing the blessing.
Otherwise, the derived class object will be blessed into the wrong class.
Update: If you have access to the Camel Book, see especially the section “Object Construction” in Chapter 12, pages 424–9 (4th Edition, 2012).
Hope that helps,
| [reply] |
Read the documentation: bless. The bless function does not need the package, it defaults to the current one (might get problematic with inheritance involved). The function returnes the blessed reference for convenience, but you are free to behave inconveniently, i.e. throw the return value away and return the object yourself.Perl does not create a new area for the object. The reference you blessed to a pakcage just knows from now on it belongs to a class.
| [reply] [d/l] |
No, I'm not talking about the package. I know the Package can be omitted. I'm just not sure whether the returned blessed Hash reference is the same thing with the object returned by bless, which should be the return value of new.
| [reply] |
If I understand your question right, you are asking about something like this:
my $this = bless $other, "ClassName";
and, you want to know if "$this" is the same as "$other".
From "perldoc -f bless",
...it returns the reference for convenience
So - Yes - it is the same, and No - it is not necessary to capture the returned object from 'bless'.
Most people believe that if it ain't broke, don't fix it.
Engineers believe that if it ain't broke, it doesn't have enough features yet.
| [reply] [d/l] |
I think the OP's question is whether he needs to capture the result of bless and return that. In other words, does "bless" actually change the reference. This was explained well in the book "Object Oriented Perl", bless does change the referant, so you do not need to capture the result. You can use ref to inspect the reference:
my $this = {};
print ref $this; # prints HASH
bless $this;
print ref $this; # prints main, or Foo if you used: bless $this, FOO
| [reply] [d/l] |
What does Data::Dumper tell you? | [reply] |
Sorry I didn't know Data::Dumper, does it tell me more than simple print?
| [reply] |
#! perl
use strict;
use warnings;
use Data::Dumper;
my %families = ( Flintstone => { husband => 'Fred',
wife => 'Wilma',
daughter => 'Pebbles', },
Rubble => { husband => 'Barney',
wife => 'Betty',
son => 'Bamm-Bamm', }, );
print Dumper(\%families), "\n";
To get similar output with print alone, you would need to write your own loops.
I didn't know Data::Dumper
Seriously, get to know it as soon as possible, it’ll save you a lot of time. Or you might prefer one of the alternatives on , such as Data::Dump.
Hope that helps,
| [reply] [d/l] |
| [reply] |