in reply to Re^2: AUTHOR default setting in h2xs
in thread AUTHOR default setting in h2xs

So, that domain was compiled into Config.pm, presumably by some Apple developer? And the only way I can change it, other than editing each instance of Makefile.PL, is to recompile Perl? Is that right?

Not important. No, that isn't right.

It would be so cool if Config.pm used something like .configrc or .config_profile to specify configuration variables, particularly those that are of interest to Perl users rather that Perl builders.

No.

Maybe you can take a minute and read the documentation for Config to figure out its purpose.

If you're making modules you're gonna have to edit Makefile.PL no matter the tools you use, as as you're going to have to edit any .xs files, or .pm files.

h2xs is just a template/stubber.

h2xs is not an IDE (integrated development environment).

That h2xs pluck host out of %Config tells you how old it is and who wrote it (its the guy who wrote perl itself).

Replies are listed 'Best First'.
Re^4: AUTHOR default setting in h2xs
by perlboy_emeritus (Scribe) on Feb 27, 2018 at 00:47 UTC
    Duh! Yes guy, I know I'm going to have to do lots of edits when making modules. I just don't like to make the same damn edit over and over again. I did not know about Config_heavy.pl. Now I do, thanks to Rob.

      If h2xs is being annoying/stupid, edit h2xs, fix h2xs

      Easy way

      myh2xs.pl use Config; $Config{mydomain} = ''; do '...h2xs';
        Easy way

        Won't work - %Config::Config is readonly.

        You can, however, get around that problem using 'tied'. One way is to create a module, let's call it Config_m.pm:
        package Config_m; use Config; my $tied = tied %Config; $tied->{mydomain} = 'new value'; 1;
        Then load that module into the script:
        use Config_m; use Config; print $Config{mydomain}; # outputs 'new value'
        This is tha approach taken by ExtUtils::FakeConfig.

        Update: Here's a much simpler example, one that doesn't require a separate module:
        use Config; $obj = tied %Config; $obj->{mydomain} = 'new value'; print $Config{mydomain}, "\n"; #outputs 'new value'
        (I knew there was a far more straightforward example than the way I originally presented it, but a series of brainfarts prevented me from finding it.)

        Cheers,
        Rob