in reply to Dynamic Package Name & Subroutine Call
A package is just a namespace identified by a string.
package Test::One; sub hello{ my $var = shift; print "Hello: $var\n"; } 1; package Test::Two; sub hello{ my $var = shift; print "Hello: $var\n"; } 1; package main; use strict; use warnings; use Data::Dumper; my @pkgs = qw( One Two ); foreach my $pkg ( @pkgs ) { "Test::$pkg"->hello(); }
This is one step toward full-fledged classes and objects, which may be a better solution in the longrun: perlobj.
If you can't plan on passing the package name as the first parameter (which is what the Class->method() notation does), then you have to construct the fully qualified sub name, which means symbolic references and some ugly syntax:
foreach my $pkg ( @pkgs ) { no strict 'refs'; &{'Test::' . $pkg . '::hello'}($pkg); }
Update: Good job on figuring out the symbolic ref syntax on your own. Looks like we both came up with the same.
Dave
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Dynamic Package Name & Subroutine Call
by tobyink (Canon) on Dec 15, 2012 at 07:57 UTC | |
by ikegami (Patriarch) on Dec 16, 2012 at 13:57 UTC | |
by Anonymous Monk on Dec 17, 2012 at 08:51 UTC | |
by ikegami (Patriarch) on Dec 17, 2012 at 13:06 UTC | |
by Anonymous Monk on Dec 17, 2012 at 13:10 UTC | |
|