Beefy Boxes and Bandwidth Generously Provided by pair Networks
Problems? Is your data what you think it is?

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:

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 line 15.

Replies are listed 'Best First'.
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?

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

How do I use this? | Other CB clients
Other Users?
Others scrutinizing the Monastery: (3)
As of 2021-09-24 18:21 GMT
Find Nodes?
    Voting Booth?

    No recent polls found