Thanks. That is exactly what I was looking for. It even works when applying a role during runtime. (This comes quite handy for implementing a dummy backend class which can fake different feature-set. Think something along the line of DBI, where you want to test the DBI class, but not the actual backend like DBD::mysql)
(Moose)
sub BUILD {
my $self = shift;
my $mode = $self->get_mode();
# normally roles are not used/required, but since we manipulate this
# class' roles at runtime we need to require the role
if ($mode =~ /R/xmsi) {
require TLA::Datastore::_readable;
TLA::Datastore::_readable->meta->apply($self);
}
if ($mode =~ /W/xmsi) {
require TLA::Datastore::_writeable;
TLA::Datastore::_writeable->meta->apply($self);
}
if ($mode =~ /X/xmsi) {
require TLA::Datastore::_execute;
TLA::Datastore::_execute->meta->apply($self);
}
return;
}
And later I can test for a specific role:
my $ds = TLA::Datastore::Dummy->new('mode' => 'R');
if ( $ds->DOES('TLA::Datastore::_readable') ) {
# do stuff
};
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.
|