Beefy Boxes and Bandwidth Generously Provided by pair Networks
The stupid question is the question not asked
 
PerlMonks  

Scalar alias vs. typeglob

by borisz (Canon)
on Oct 05, 2006 at 08:30 UTC ( #576487=perlquestion: print w/ replies, xml ) Need Help??
borisz has asked for the wisdom of the Perl Monks concerning the following question:

Hi,
I just want to alias a scalar to a different package var. But only the * notation work as expected. This looks like a bug to me, but propably someone can explain the behavior.

I expect, that both aliases do the same and the output is 'boris boris'
package XYZ; sub test { local *name = \'boris'; $_[1]->() } package ABC; *scalar_alias = \$XYZ::name; # does not work *glob_alias = *XYZ::name; # DWIM package main; use warnings; XYZ->test( sub { print 'scalar_alias: ', $XYZ::name, ' ', $ABC::scalar_alias, $/; print 'glob_alias: ', $XYZ::name, ' ', $ABC::glob_alias, $/; } ); __OUTPUT__ scalar_alias: boris glob_alias: boris boris Use of uninitialized value in print at untitled 74.pl line 15.
Boris

Comment on Scalar alias vs. typeglob
Download Code
Re: Scalar alias vs. typeglob
by ambrus (Abbot) on Oct 05, 2006 at 11:54 UTC

    The XYZ::test function has the statement local *name = \'boris';. That statement chagnes the scalar reference part of *XYZ::name not only the value of the scalar it points to. Now, the ABC package copies the old scalar reference to the *ABC::scalar_alias glob, so it won't see the new reference. (The same would be true if you changed that statement to local $name = 'boris'; because the local keyword also replaces the scalar reference.)

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others avoiding work at the Monastery: (4)
As of 2015-05-29 01:43 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    In my home, the TV remote control is ...









    Results (574 votes), past polls