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
In Section
Seekers of Perl Wisdom