http://qs321.pair.com?node_id=1214673


in reply to Variable declared in script, used by module, and used in script

Quick and dirty (Windows 7, Perl 5.8.9):
Module check_module.pm:

package check_module; use Exporter; our @ISA = qw(Exporter); our @EXPORT = qw(@checks); our @checks = ( { name => 'Anybody home?', script => 'qq/echo $home_dir/', }, ); 1;
Note esp. that  'qq/echo $home_dir/' is single-quoted in the .pm file.

Script:

c:\@Work\Perl\monks\ExReg>perl -wMstrict -le "use strict; use warnings; use check_module; my $home_dir = '/home/mine/'; for my $check ( @checks ) { print qq{Checking $check->{name}}; my $evaled_script = eval qq{$check->{script}}; print `$evaled_script`; } " Checking Anybody home? /home/mine/
(Update: The trick here is to eval the  $check->{script} string from the module in the scope of the script in which  $home_dir is declared and initialized.)

Update 1: If you had included the  use warnings; use strict; statements in the .pm module (after the package statement), you would have had a slightly earlier and possibly slightly more informative notification that something was going sideways.

Update 2:

... [a] system that cannot use CPAN ...
See Yes, even you can use CPAN.


Give a man a fish:  <%-{-{-{-<

Replies are listed 'Best First'.
Re^2: Variable declared in script, used by module, and used in script
by ExReg (Priest) on May 16, 2018 at 17:47 UTC

    Many thanks. I don't know why I couldn't remember eval. That does the trick.