in reply to Variable Name Mistery. Who calls?

If you take ikegami's idea one more step. You can enforce the variable name and save a little typing. However you get odd syntax.
{ package Foo; sub new { my ($class, $id) = @_; my $self = { id => $id }; my ($package) = caller; ${$callpkg."::".$id} = bless $self, $class; undef; } sub method { my ($self, $name) = @_; print $self->{id}, "\n"; } } Foo->new('one'); Foo->new('second'); $one->method; $second->method;
This does not have the same syntax, but does get you the same result with about the same number of words. And you get pretty good error detection.
-- gam3
A picture is worth a thousand words, but takes 200K.

Replies are listed 'Best First'.
Re^2: Variable Name Mistery. Who calls?
by Hofmator (Curate) on Oct 26, 2006 at 09:43 UTC
    The problem with your solution is that it is installing global package variables into the calling module (or main script). Normally - and also in ikegami's post - you use local my variables for objects!

    -- Hofmator

    Code written by Hofmator and posted on PerlMonks is public domain. It is provided as is with no warranties, express or implied, of any kind. Posted code may not have been tested. Use of posted code is at your own risk.