Wiggins d Anconia wrote:
>> Folks,
>>
>> I've run into a couple of issues with use and was hoping someone
>> could help me come up with a solution.
>>
>> First, I use a specific module in a work environment to set some
>> global variables. I want to re-use my code in another environment
>> which doesn't have the specific configuration module. I don't want to
>> have to keep two separate copies of the code. What I currently use in
>> the work environment is of the format:
>>
>> use lib '/path/to/work/modules';
>> use Prefs;
>>
>> my $config = Prefs->new();
>> my $param1 = $config->get("PARAM1");
>>
>> I'd like to something of the format:
>>
>> my $param1;
>> if (-f '/path/to/work/modules/Prefs.pm') {
>> use lib '/path/to/work/modules';
>> use Prefs;
>>
>> my $config = Prefs->new();
>> $param1 = $config->get("PARAM1");
>> }
>> else {
>> $param1 = "default value here";
>> }
>>
>> Is something like this possible?
>>
>
> perldoc -f eval (2nd form)
>
> Generally you use 'eval' to wrap a segment of code that can die, then
> just catch the error and set your default when an error occurs. So in
> this case if the module isn't available, can't be loaded (think
> syntax error in it), or causes some other error, then the failure
> will be caught and you can move on gracefully.
>
> If the examples in the doc aren't sufficient, come back and someone
> will provide a good example.
>
>> Also, some of the config-style modules I use store their
>> configuration values with the module itself. Using the above example
>> Prefs.pm, the function $config->get("PARAM1") might look like:
>>
>> my $self = shift;
>> my $val = shift;
>> return $self->{DATA}{$val};
>>
>> I have code which runs daemonized (using Proc::Daemon) that begins by
>> using the Prefs config module. It's quite possible that the
>> parameters in the Prefs config module get modified. I may need my
>> daemonized code to "refresh" its copy of the Prefs config module to
>> pull in the new parameters. Can this be done, or do I have to stop
>> the daemon and restart it?
>>
>> Thanks all!
>> - Ed
>>
>
> perldoc -f do
>
> There is an example of this very thing in that doc. In the case of
> your daemon, usually you would set up a signal handler, catch the
> signal (usually HUP) and re-init the config information when that
> signal is received.
>
> perldoc perlipc (for more about signal handling)
>
> There is excellent information about daemons in the Network
> Programming with Perl book, I highly recommend it if you have the
> resources and will be writing code of this nature.
>
> http://danconia.org
Wiggins,
Thanks for the help! I was hung-up on the notion that every module I
loaded had to be loaded at compile-time. By using the "do" function, I
can optionally load and/or reload my modules at run-time. My code now
looks like:
my $setting = 'localhost';
if (-f '/usr/local/PerlModules/Prefs.pm') {
do '/usr/local/PerlModules/Prefs.pm';
my $config = Prefs->new();
$setting = $config->read('DB_SERVER');
}
print "$setting\n";
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>