Beefy Boxes and Bandwidth Generously Provided by pair Networks
Welcome to the Monastery

A problem when modify a pm

by anaconda_wly (Scribe)
on Dec 19, 2012 at 03:33 UTC ( #1009482=perlquestion: print w/replies, xml ) Need Help??
anaconda_wly has asked for the wisdom of the Perl Monks concerning the following question:

As suggested on net(see, I added lines to TieRegistry to support 64 rgistry's accessing. I copied and rename the TieRegistry copy to TieRegistry64 in the same folder, as well as updating the package and the "use TieRegistry64". But I got an error not recognize the $Registry: Global symbol "$Registry" requires explicit package name. How ca I do?

in TieRegistry64:
package Win32::TieRegistry64Support;# change name ...... sub KEY_WOW64_64KEY () { 0x0100} sub KEY_WOW64_32KEY () { 0x0200} ........ @$RegObj{qw( HANDLE MACHINE PATH DELIM OS_DELIM ACCESS FLAGS ROOTS )}= + ( "NONE", "", [], "\\", "\\", KEY_READ|KEY_WRITE|KEY_WOW64_64KEY|KEY_WOW64_32KEY, $Flag_HexDWord +|$Flag_FixNulls, "${PACK}::_Roots" );
in my perl, change from:
use Win32::TieRegistry;
use Win32::TieRegistry64;
I checked the path correct. Any suggestion?

Replies are listed 'Best First'.
Re: A problem when modify a pm
by Athanasius (Chancellor) on Dec 19, 2012 at 05:58 UTC

    I cannot reproduce your problem:

    1. Copied the module Win32::TieRegistry and renamed the copy as Win32::TieRegistry64.

    2. Changed package Win32::TieRegistry; to package Win32::TieRegistry64;.

    3. Changed

      BEGIN { $PACK = 'Win32::TieRegistry'; $VERSION = '0.26'; @ISA = 'Tie::Hash'; }


      BEGIN { $PACK = 'Win32::TieRegistry64'; $VERSION = '0.26'; @ISA = 'Tie::Hash'; }
    4. Changed

      # Basic master Registry object: $RegObj= {}; @$RegObj{qw( HANDLE MACHINE PATH DELIM OS_DELIM ACCESS FLAGS ROOTS )}= + ( "NONE", "", [], "\\", "\\", KEY_READ|KEY_WRITE, $Flag_HexDWord|$Flag_FixNulls, "${PACK}::_Root +s" );


      # Basic master Registry object: sub KEY_WOW64_64KEY () { 0x0100 } sub KEY_WOW64_32KEY () { 0x0200 } $RegObj= {}; @$RegObj{qw( HANDLE MACHINE PATH DELIM OS_DELIM ACCESS FLAGS ROOTS )}= + ( "NONE", "", [], "\\", "\\", KEY_READ|KEY_WRITE|KEY_WOW64_64KEY|KEY_WOW64_32KEY, $Flag_HexDWord +|$Flag_FixNulls, "${PACK}::_Roots" );

    The resulting module contains the variable $Registry (a blessed hash reference) which is still accessible:

    15:39 >perl -Mstrict -MWin32::TieRegistry64 -wE "say $Registry;" Win32::TieRegistry64=HASH(0x17155bc) 15:55 >

    Perhaps you missed one of the steps above? Or there’s something more you haven’t shown?

    Athanasius <°(((><contra mundum Iustus alius egestas vitae, eros Piratica,

      Yes, you're right! I missed step 3 as I thought it's just a string and may not affect the finding. The error missing now. I'll read document about things in Begin block. Thank you!
Re: A problem when modify a pm
by bulk88 (Priest) on Dec 19, 2012 at 04:35 UTC
    I don't understand what you are doing, and you aren't showing enough code. the "use Some::Thing;" goes by file on your disk, never what is inside the file. It has no connection to the packages declared in that file. Usually a Perl module file's name will be identical to the package statement in the that module for sanity reasons.

      OK, it's like this: to solve a problem, I have to make changes to the TieRegistry module. But to be safe, I didn't change on it directly. Instead, I made a copy and change the copied one and renamed it as TieRegistry64 in the same Perl lib folder as TieRegistry. But error mentioned happens and I didn't know how to fix at the moment.

        The TieRegistry is a standard module of Perl. In normal time when I "use Win32:TieRegistry", I can use $Registry directly without error. I found one line in TieRegistry:

        use vars qw( $RegObj %_Roots %RegHash $Registry );

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://1009482]
Front-paged by bulk88
and all is calm...

How do I use this? | Other CB clients
Other Users?
Others meditating upon the Monastery: (4)
As of 2018-07-19 10:17 GMT
Find Nodes?
    Voting Booth?
    It has been suggested to rename Perl 6 in order to boost its marketing potential. Which name would you prefer?

    Results (406 votes). Check out past polls.