Hi Monks,
I have a lot (30 94 and growing) of MooseX::Getopt based scripts inheriting from a single role (My::App). My::App includes quite a few getopt-enabled switches which don't make sense in some of the scripts which inherit from it. The result is that when the user runs script --help, they get a page and a half of options which are irrelevant.
I can suppress some options from a script by adding following to the attribute declarations in the inheriting script:
has( "+$_", traits => ['NoGetopt'] ) for qw<fast_db html_output japane
+se_wts debug_soap lease_tolerance>;
This is effective, but not pretty, and since I have so many classes which use it, it would be nice to put it into a sub in a shared package. My::App seems like the logical choice, but:
has '+attr' is not supported in roles ...
Which is fine with me, but I'm calling this in a class, it's just that Moose thinks I'm calling it in a role. has isn't a method, so I can't use my package to tell Moose that it's being called from a role. It looks like has is using caller to see where it's being called from.
So what do people suggest? Should I:
- Put the 'disable_getopt_attribute' code in a different (new) package (which will probably never contain anything else)
- Try to work out how to trick has into running in a role
- Cut and paste the ugly code in all my classes
What do you think?
Update Much more than 30
-
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.
|