Beefy Boxes and Bandwidth Generously Provided by pair Networks
No such thing as a small change
 
PerlMonks  

Re^2: Use variable as a module during runtime.

by yoda54 (Monk)
on Oct 21, 2012 at 03:11 UTC ( #1000168=note: print w/ replies, xml ) Need Help??


in reply to Re: Use variable as a module during runtime.
in thread Use variable as a module during runtime.

So after that, I can do stuff like "my $object = $f->new ?"

I get errors like: Can't locate object method "test" via package "package Test.

Thanks for the help!

Regards.


Comment on Re^2: Use variable as a module during runtime.
Re^3: Use variable as a module during runtime.
by Athanasius (Abbot) on Oct 21, 2012 at 03:40 UTC

    In your original code, $f was a variable holding the whole code of the module as a string. So of course

    $f->new

    would produce syntax errors! You need to replace $f with whatever name you gave the module, i.e., the name you used in the package declaration.

    Here is an example to show how this works:

    (1) File “Widget.pm”:

    #! perl use strict; use warnings; package Widget; sub new { my ($class, $name) = @_; my %self = (name => $name); bless \%self, $class; } sub say_hello { my ($self) = @_; print "$self->{name} says \"Hello!\"\n"; } 1;

    (2) The main .pl script (in the same directory as Widget.pm):

    #! perl use strict; use warnings; use autodie; open(my $fh, '<', 'Widget.pm'); my $f = do { local $/; <$fh> }; close $fh; eval $f; warn $@ if $@; my $widget = Widget->new('Gromit'); $widget->say_hello();

    When I run this, I get:

    Gromit says "Hello!"

    as expected.

    Athanasius <°(((><contra mundum

      In your original code, $f was a variable holding the whole code of the module as a string.

      That was your assumption. The other possibility is that the file contained something like "Module::Name". yoda54 would need to provide example data to know for sure.

      Update: oh, I see from the partial error message in the grandparent of this node that you are indeed correct. Sorry for the noise.

      Thank you very much!

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1000168]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others browsing the Monastery: (17)
As of 2015-07-02 18:53 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (44 votes), past polls