Outaspace has asked for the wisdom of the Perl Monks concerning the following question:

Dear fellow Monks,

I have made myself a editor for the Perl Config. But now there is the question how I can update the Config File(s) with my values.

What I have: An Array of Config Key=Value pairs.

What I need to do:
Writing those values to the Config (for any Perl Version) The difficulty is that there seems to be many different "layouts" for the config files, so I ask myself:
Is it possible to modify the Config without using a editor to modify the Config file(s) manually?

Humble,

Andre

20060929 Janitored by Corion: Added formatting, removed pre tags, as per Writeup Formatting Tips

  • Comment on Modifying Config.pm and/or Config_heavy.pl

Replies are listed 'Best First'.
Re: Modifying Config.pm and/or Config_heavy.pl
by shmem (Chancellor) on Sep 29, 2006 at 12:30 UTC
    Why do you want to modify Config.pm? Don't.

    If you need the perl config for subsequent building of perl, use

    perl -MConfig=config_sh -e 'print config_sh()' > config.sh

    and edit config.sh.

    Editing the Config.pm for any other purpose doesn't make sense and will break things.

    --shmem

    _($_=" "x(1<<5)."?\n".q·/)Oo.  G°\        /
                                  /\_¯/(q    /
    ----------------------------  \__(m.====·.(_("always off the crowd"))."·
    ");sub _{s./.($e="'Itrs `mnsgdq Gdbj O`qkdq")=~y/"-y/#-z/;$e.e && print}
      Why do you want to modify Config.pm? Don't.

      I think that, in general, that's an excellent rule .... and there are exceptions that prove that rule :-)

      Cheers,
      Rob
Re: Modifying Config.pm and/or Config_heavy.pl
by syphilis (Archbishop) on Sep 29, 2006 at 12:37 UTC
    Is it possible to modify the Config without using a editor to modify the Config file(s) manually?

    Hi Outaspace,

    Indeed it is possible (as per ExtUtils::FakeConfig):
    use warnings; use strict; use Config; my $obj = tied %Config::Config; print $Config::Config{make}, "\n"; $obj->{make} = "modified_value"; print $Config::Config{make}, "\n"; __END__ outputs: dmake modified_value

    Under certain situations (eg in a Makefile.PL) you might need to run that code in a BEGIN{} block.

    Cheers,
    Rob

      Ok, but I need a way to save the config to the files. The main purpose is to administrate different Perl Versions. I allready thought about writing my own config files, where the admin can define own summary output and can add values. Maybe it can be done with something like FakeConfig, but on every perl startup.

      I know it isnt wise to edit the Config, but there are some values which are safe to edit (if you know what you do) like relocating lib pathes, editing "cf_email", "_exe", ...

      Andre

        The main purpose is to administrate different Perl Versions

        Couldn't you just run a script that sets which perl is found ? On my Win32 box I have six or so versions of perl and run a batch file to set the path so that 'perl' finds the perl executable that I want. (I have a separate batch file for each build of perl.) Then %Config should contain the info I want.

        If you really do need to rewrite Config.pm then it's best to do something similar to EU::FC - which leaves the existing Config files as they are, writes the new values in Config_m.pm, and loads those new values, when needed, by running perl with the '-MConfig_m' switch (or by setting the perl5opt environment variable to '-MConfig_m').

        Cheers,
        Rob