http://www.perlmonks.org?node_id=1000169


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

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