in reply to Installing a config file during module operation

I doubt there is one module which can do that in a system-independent way. The whole idea of a "home directory" is already rather foreign on Windows. I would go for storing the defaults in a Perl-module (config.pm?) which you place somewhere in the usual Perl/site/lib hierarchy close to where your module will reside. I think that is the only way to do it in a portable way. You will of course have to key the defaults in this module with the user's id to enable you to store multiple users in the same module.

CountZero

"If you have four groups working on a compiler, you'll get a 4-pass compiler." - Conway's Law

Replies are listed 'Best First'.
Re^2: Installing a config file during module operation
by xdg (Monsignor) on Aug 07, 2005 at 21:41 UTC

    As the guilty party for suggesting a config file to Jim, I should add that I was hoping that Config::Find could be used to provide a system independent way to locate a config file. The heuristics for Windows are described at Config::Find::WinAny. Has anyone tried out this module?

    -xdg

    Code written by xdg and posted on PerlMonks is public domain. It is provided as is with no warranties, express or implied, of any kind. Posted code may not have been tested. Use of posted code is at your own risk.

      I did cast a look at that module, but since it uses the return value of Win32::GetFolderPath(CSIDL_LOCAL_APPDATA) to find a good place to store the config files and Win32::GetFolderPath(CSIDL_LOCAL_APPDATA) on my Windows XP Professional points to C:\Documents and Settings\kjm\Desktop, all the config files would be put on my desktop!

      Obviously that is not a good solution. Perhaps there is something wrong in my setup, but if the module relies on something which can be so easily broken, I rather pass.

      Update: I checked the module once more and the latest version (0.18 or 0.21) does import the constant, so it seems OK.

      CountZero

      "If you have four groups working on a compiler, you'll get a 4-pass compiler." - Conway's Law

        I'm getting the same idea on the windows machine here, too - wierd. According to the CSIDL documentation on MS's site, CSIDL_LOCAL_APPDATA has "[a] typical path [of] C:\Documents and Settings\username\Local Settings\Application Data." [emphasis in original] But here, that returns the desktop, just like yours. Wierd. Perhaps that's a bug in Win32?

        Update: No, no bug in Win32 - nor even Windows. PEBKAC. As xdg points out, failing to import the constant was the problem. That said, it was quite well hidden at the end of a longish paragraph. I suppose I could make a suggestion to the author: bold this in the perldoc :-) - but that's merely a suggestion, not a bug report ;-)

Why not use the registry on Windows?
by BerntB (Deacon) on Aug 08, 2005 at 00:34 UTC
    Why can't you just do something like this? Use a trivial API:
    get_value_names($config_name); - returns array with names of stored parameters get_value($config_name, param_name); set_value($config_name, param_name, value); clr_config($config_name);

    With all due respect (and condoleances) to the people (*) who knows more about the registry than me, but why can't you just dump the values in registry keys on Windows -- and a nice config file under Unix?

    It seems the obvious and trivial way of doing it? What doesn't I understand?

    Update:
    Just use a tie to a hash for API. No fuss, no muss. Also, add export/import to text file under Windows.

    (*) Millions of people, literally :-)

      As a recovering Windows user, I have to say that playing with the registry is just asking for trouble. It only takes a very minor mistake to corrupt the registry, and that could leave your system unbootable. Ask me how I know this ;-)

      If you *do* want to play around with the registry, make sure you've made a good backup of it, and also review (before you begin) how to restore a corrupt registry. It can be done, but it's hard to read the help files once you've lost the ability to boot.