diff options
author | Larry Wall <lwall@netlabs.com> | 1995-03-12 22:32:14 -0800 |
---|---|---|
committer | Larry Wall <lwall@netlabs.com> | 1995-03-12 22:32:14 -0800 |
commit | 748a93069b3d16374a9859d1456065dd3ae11394 (patch) | |
tree | 308ca14de9933a313dceacce8be77db67d9368c7 /pod/perlobj.pod | |
parent | fec02dd38faf8f83471b031857d89cb76fea1ca0 (diff) | |
download | perl-748a93069b3d16374a9859d1456065dd3ae11394.tar.gz |
Perl 5.001perl-5.001
[See the Changes file for a list of changes]
Diffstat (limited to 'pod/perlobj.pod')
-rw-r--r-- | pod/perlobj.pod | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/pod/perlobj.pod b/pod/perlobj.pod index e4f34ba48d..6bbaab4704 100644 --- a/pod/perlobj.pod +++ b/pod/perlobj.pod @@ -69,7 +69,7 @@ reference as an ordinary reference. Outside the class package, the reference is generally treated as an opaque value that may only be accessed through the class's methods. -A constructor may rebless a referenced object currently belonging to +A constructor may re-bless a referenced object currently belonging to another class, but then the new class is responsible for all cleanup later. The previous blessing is forgotten, as an object may only belong to one class at a time. (Although of course it's free to @@ -224,6 +224,13 @@ name with the package like this: $fred = Critter->MyCritter::find("Fred"); $fred->MyCritter::display('Height', 'Weight'); +Sometimes you want to call a method when you don't know the method name +ahead of time. You can use the arrow form, replacing the method name +with a simple scalar variable containing the method name: + + $method = $fast ? "findfirst" : "findbest"; + $fred->$method(@args); + =head2 Destructors When the last reference to an object goes away, the object is @@ -240,6 +247,21 @@ applies to reblessed objects--an object reference that is merely I<CONTAINED> in the current object will be freed and destroyed automatically when the current object is freed. +=head2 WARNING + +An indirect object is limited to a name, a scalar variable, or a block, +because it would have to do too much lookahead otherwise, just like any +other postfix dereference in the language. The left side of -> is not so +limited, because it's an infix operator, not a postfix operator. + +That means that below, A and B are equivalent to each other, and C and D +are equivalent, but AB and CD are different: + + A: method $obref->{"fieldname"} + B: (method $obref)->{"fieldname"} + C: $obref->{"fieldname"}->method() + D: method {$obref->{"fieldname"}} + =head2 Summary That's about all there is to it. Now you just need to go off and buy a |