Beefy Boxes and Bandwidth Generously Provided by pair Networks
Welcome to the Monastery
 
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 drinking their drinks and smoking their pipes about the Monastery: (10)
As of 2014-09-30 16:09 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    How do you remember the number of days in each month?











    Results (377 votes), past polls