I would like to do something like this as the top of my program to allow the log level and log file for Log::StdLog to be specified in the configuration file.

use Config::Std; use Readonly; Readonly my $DEFAULT_LOG_LEVEL => q{warn}; Readonly my $DEFAULT_LOG_FILE => $PROGRAM_NAME . q{.log}; Readonly my $DEFAULT_CONFIG_FILE => $PROGRAM_NAME . q{.cfg}; read_config $DEFAULT_CONFIG_FILE => my %config; use Log::StdLog { level => ($config{'log'}{'level'} || $DEFAULT_LOG_LEVEL), file => ($config{'log'}{'file' } || $DEFAULT_LOG_FILE ) };

The problem I'm running into is that I can't pass the Readonly variables to Log::StdLog since the use happens before the Readonly calls. I can solve the problem by using a BEGIN block (see below), but I'd like a way to do it that does not have the Readonly variables listed out twice.

my $EMPTY_STRING ; my $DEFAULT_LOG_LEVEL ; my $DEFAULT_LOG_FILE ; my $DEFAULT_CONFIG_FILE ; my %config = (); use Config::Std; use Readonly; BEGIN { Readonly $EMPTY_STRING => q{}; Readonly $DEFAULT_LOG_LEVEL => q{warn}; Readonly $DEFAULT_LOG_FILE => $PROGRAM_NAME . q{.log}; Readonly $DEFAULT_CONFIG_FILE => $PROGRAM_NAME . q{.cfg}; read_config $DEFAULT_CONFIG_FILE => %config; } use Log::StdLog { level => ($config{'log'}{'level'} || $DEFAULT_LOG_LEVEL), file => ($config{'log'}{'file' } || $DEFAULT_LOG_FILE ) };

Ideas?

One route I did try was using the BEGIN block for the read_config line (for DEFAULT_CONFIG_FILE) and then using a require/import for the Log::StdLog call. The problem was STDLOG was not set up for use.

Thank you for the input!

Casey


In reply to Readonly vars as input to other modules by cmilfo

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.