Beefy Boxes and Bandwidth Generously Provided by pair Networks
There's more than one way to do things

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
[Corion]: Text::CSV_XS for all your CSV file parsing needs. Other than that, what problems do you have with perlre, and capturing everything after the comma? Also, index and substr would also work.
[choroba]: my ($value) = $string =~ /.*,(.*)/
[choroba]: The .* at the beginning matches the longest possible substring, so it eats any previous commas
[choroba]: But for CSV, use appropriate modules

How do I use this? | Other CB clients
Other Users?
Others scrutinizing the Monastery: (8)
As of 2018-05-27 08:54 GMT
Find Nodes?
    Voting Booth?