... I am trying to pass the value from the script.pl to the module.pm ... how can I send the value from the script.pl to the Foo.pm?
You can't, at least not with the OPed code. The private lexical (my) scalar variable $hello in Foo.pm in the OPed code is assigned a value once and only once and print-ed once and only once, both events occurring during module inclusion. The $hello scalar in the OPed Foo.pm has no getter or setter (accessor/mutator) function defined for it that would allow it ever again to be accessed or given another value; it is a private module variable that is not "exposed". Here's a variation of the OPed code with a getter (but still no setter!) for the lexical variable:
# Foo.pm
package Foo;
use warnings;
use strict;
use parent 'Exporter';
our @EXPORT_OK = qw(hello get_hello);
my $hello = hello('evaluated during module inclusion');
sub hello {
my $h = shift;
return $h;
}
sub get_hello {
return $hello;
}
print 'from package ', __PACKAGE__, " during use: '$hello' \n";
1;
and:
# use_foo_1.pl
use warnings;
use strict;
use Foo qw(hello get_hello);
hello('test');
print 'from package ', __PACKAGE__, " during execution: '", get_hello,
+ "' \n";
Output:
c:\@Work\Perl\monks\Anonymous Monk\1207065>perl use_foo_1.pl
from package Foo during use: 'evaluated during module inclusion'
from package main during execution: 'evaluated during module inclusion
+'
Update: Here's another example with both a getter and setter defined for the $hello private module variable. Both the module and it's use-ing script have been changed.
Give a man a fish: <%-{-{-{-<
|