in reply to Re^3: Passing value to a Perl module
in thread Passing value to a Perl module

I see that, I know that, but I am trying to pass the value from the script.pl to the module.pm
hello('test'); has been called by the script.pl
I can fix the uninitialized by using this in Foo.pm
 my $hello = hello() || '';
But how can I send the value from the script.pl to the Foo.pm?

Replies are listed 'Best First'.
Re^5: Passing value to a Perl module
by AnomalousMonk (Archbishop) on Jan 10, 2018 at 17:33 UTC
    ... 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:  <%-{-{-{-<

Re^5: Passing value to a Perl module
by NetWallah (Canon) on Jan 10, 2018 at 16:53 UTC
    This works:
    Foo.pm:
    package Foo; use strict; use warnings; use base 'Exporter'; our $hello = \&hellosub; our @EXPORT_OK = ( '$hello'); sub hellosub { my $h = shift; return $h; } print $hello->("Foo Mod init"),"\n"; 1;
    test caller code:
    use strict; use warnings; BEGIN { push ( @INC,"."); } use Foo ('$hello'); print $hello->('test'),"\n";

                    Is a computer language with goto's totally Wirth-less?