Search code examples
perlaliastypeglobperl-stash

In Perl, is there any difference between direct glob aliasing and aliasing via the stash?


In Perl, is there ever any difference between the following two constructs:

*main::foo = *main::bar

and

$main::{foo} = $main::{bar}

They appear to have the same function (aliasing all of the slots in *main::foo to those defined in *main::bar), but I am just wondering if this equivalency always holds.


Solution

  • Maybe not the kind of difference you were looking for, but there are two big differences between *main::foo and $main::{foo}; the former looks up the glob in the stash at compile time, creating it if necessary, while the latter looks for the glob in the stash at run time, and won't create it.

    This may make a difference to anything else poking about in the stash, and it certainly can affect whether you get a used only once warning.