I am trying to alias or marry 2 packages without using a loop and individually glob aliasing all the symbols in that package. If I run the nz::p1 function in an eval, it works fine. I can see nz::p1 is real and is a CV after the "*nz:: = *pz::;" line with Devel Peek. If I call nz::p1 without a eval, it errors out with
Use of uninitialized value in subroutine entry at pkgalias.pl line 28. Undefined subroutine & called at pkgalias.pl line 28.
The code is
use strict; use warnings; use Data::Dumper; use Devel::Peek; package pz; sub p1 { return 1; } sub p2 { return 2; } package main; print "pz is".Dumper(\%pz::); print "nz is".Dumper(\%nz::); print "before alias\n"; *nz:: = *pz::; print "after alias\n"; print "nz is".Dumper(\%nz::); warn("dumping PZ\n"); Dump(\%pz::); warn("dumping NZ\n"); Dump(\%nz::); #eval "print nz::p1();"; #if($@) { # die $@; #} print nz::p1(); print "after nz::p1() run\n";
Whats going on?

My output of the script
pz is$VAR1 = { "p1" => *pz::p1, "p2" => *pz::p2 }; nz is$VAR1 = { "p1" => *nz::p1 }; before alias after alias nz is$VAR1 = { "p1" => *pz::p1, "p2" => *pz::p2 }; dumping PZ SV = IV(0x8ec8d8) at 0x8ec8dc REFCNT = 1 FLAGS = (TEMP,ROK) RV = 0x829fdc SV = PVHV(0x39ca04) at 0x829fdc REFCNT = 2 FLAGS = (OOK,SHAREKEYS) ARRAY = 0x85d9bc (0:6, 1:2) hash quality = 125.0% KEYS = 2 FILL = 2 MAX = 7 RITER = -1 EITER = 0x0 NAME = "pz" BACKREFS = 0x8dad74 SV = PVAV(0x398c04) at 0x8dad74 REFCNT = 2 FLAGS = () ARRAY = 0x839154 FILL = 1 MAX = 3 ARYLEN = 0x0 FLAGS = () Elt No. 0 SV = PVGV(0x8e6f14) at 0x829fcc REFCNT = 1 FLAGS = (MULTI) NAME = "p1" NAMELEN = 2 GvSTASH = 0x829fdc "pz" GP = 0x8355d4 SV = 0x0 REFCNT = 1 IO = 0x0 FORM = 0x0 AV = 0x0 HV = 0x0 CV = 0x829f7c CVGEN = 0x0 LINE = 9 FILE = "pkgalias.pl" FLAGS = 0x2 EGV = 0x829fcc "p1" Elt No. 1 SV = PVGV(0x8e6f34) at 0x84550c REFCNT = 1 FLAGS = (MULTI) NAME = "p2" NAMELEN = 2 GvSTASH = 0x829fdc "pz" GP = 0x8356a4 SV = 0x0 REFCNT = 1 IO = 0x0 FORM = 0x0 AV = 0x0 HV = 0x0 CV = 0x8daf44 CVGEN = 0x0 LINE = 12 FILE = "pkgalias.pl" FLAGS = 0x2 EGV = 0x84550c "p2" MRO_WHICH = "dfs" (0x281f7560) CACHE_GEN = 0x1 PKG_GEN = 0x1b Elt "p2" HASH = 0xe8474e38 SV = PVGV(0x8e6f34) at 0x84550c REFCNT = 1 FLAGS = (MULTI) NAME = "p2" NAMELEN = 2 GvSTASH = 0x829fdc "pz" GP = 0x8356a4 SV = 0x0 REFCNT = 1 IO = 0x0 FORM = 0x0 AV = 0x0 HV = 0x0 CV = 0x8daf44 CVGEN = 0x0 LINE = 12 FILE = "pkgalias.pl" FLAGS = 0x2 EGV = 0x84550c "p2" Elt "p1" HASH = 0xf4b56714 SV = PVGV(0x8e6f14) at 0x829fcc REFCNT = 1 FLAGS = (MULTI) NAME = "p1" NAMELEN = 2 GvSTASH = 0x829fdc "pz" GP = 0x8355d4 SV = 0x0 REFCNT = 1 IO = 0x0 FORM = 0x0 AV = 0x0 HV = 0x0 CV = 0x829f7c CVGEN = 0x0 LINE = 9 FILE = "pkgalias.pl" FLAGS = 0x2 EGV = 0x829fcc "p1" dumping NZ SV = IV(0x8ec8d8) at 0x8ec8dc REFCNT = 1 FLAGS = (TEMP,ROK) RV = 0x829fdc SV = PVHV(0x39ca04) at 0x829fdc REFCNT = 2 FLAGS = (OOK,SHAREKEYS) ARRAY = 0x85d9bc (0:6, 1:2) hash quality = 125.0% KEYS = 2 FILL = 2 MAX = 7 RITER = -1 EITER = 0x0 NAME = "pz" BACKREFS = 0x8dad74 SV = PVAV(0x398c04) at 0x8dad74 REFCNT = 2 FLAGS = () ARRAY = 0x839154 FILL = 1 MAX = 3 ARYLEN = 0x0 FLAGS = () Elt No. 0 SV = PVGV(0x8e6f14) at 0x829fcc REFCNT = 1 FLAGS = (MULTI) NAME = "p1" NAMELEN = 2 GvSTASH = 0x829fdc "pz" GP = 0x8355d4 SV = 0x0 REFCNT = 1 IO = 0x0 FORM = 0x0 AV = 0x0 HV = 0x0 CV = 0x829f7c CVGEN = 0x0 LINE = 9 FILE = "pkgalias.pl" FLAGS = 0x2 EGV = 0x829fcc "p1" Elt No. 1 SV = PVGV(0x8e6f34) at 0x84550c REFCNT = 1 FLAGS = (MULTI) NAME = "p2" NAMELEN = 2 GvSTASH = 0x829fdc "pz" GP = 0x8356a4 SV = 0x0 REFCNT = 1 IO = 0x0 FORM = 0x0 AV = 0x0 HV = 0x0 CV = 0x8daf44 CVGEN = 0x0 LINE = 12 FILE = "pkgalias.pl" FLAGS = 0x2 EGV = 0x84550c "p2" MRO_WHICH = "dfs" (0x281f7560) CACHE_GEN = 0x1 PKG_GEN = 0x1b Elt "p2" HASH = 0xe8474e38 SV = PVGV(0x8e6f34) at 0x84550c REFCNT = 1 FLAGS = (MULTI) NAME = "p2" NAMELEN = 2 GvSTASH = 0x829fdc "pz" GP = 0x8356a4 SV = 0x0 REFCNT = 1 IO = 0x0 FORM = 0x0 AV = 0x0 HV = 0x0 CV = 0x8daf44 CVGEN = 0x0 LINE = 12 FILE = "pkgalias.pl" FLAGS = 0x2 EGV = 0x84550c "p2" Elt "p1" HASH = 0xf4b56714 SV = PVGV(0x8e6f14) at 0x829fcc REFCNT = 1 FLAGS = (MULTI) NAME = "p1" NAMELEN = 2 GvSTASH = 0x829fdc "pz" GP = 0x8355d4 SV = 0x0 REFCNT = 1 IO = 0x0 FORM = 0x0 AV = 0x0 HV = 0x0 CV = 0x829f7c CVGEN = 0x0 LINE = 9 FILE = "pkgalias.pl" FLAGS = 0x2 EGV = 0x829fcc "p1" Use of uninitialized value in subroutine entry at pkgalias.pl line 28. Undefined subroutine & called at pkgalias.pl line 28.

In reply to package aliasing by bulk88

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.