Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses
 
PerlMonks  

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

by Athanasius (Archbishop)
on Oct 21, 2012 at 03:40 UTC ( [id://1000169]=note: print w/replies, xml ) Need Help??


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

Replies are listed 'Best First'.
Re^4: Use variable as a module during runtime.
by ysth (Canon) on Oct 22, 2012 at 01:40 UTC
    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.

Re^4: Use variable as a module during runtime.
by yoda54 (Monk) on Oct 22, 2012 at 23:41 UTC
    Thank you very much!

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others taking refuge in the Monastery: (2)
As of 2024-04-19 01:05 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found