Hi fellas. Thanks to your help, I've been getting down with Moose. ;-) Now I have a builder method for a logfile attribute. It checks if the logfile exists, and if so, call it logfile-2.txt, logfile-3.txt, and so on. Here's the code:
has 'cmd_logfile' => ( is => 'ro', isa => 'Str', required => 0, la +zy => 1, builder => '_build_cmd_logfile' ); sub _build_cmd_logfile { my $self = shift; my $inner = $self->dl_inner_dir; defined $inner or die "Error: DL_ +INNER_DIR not set."; my $b4_ext = "$inner/transfer"; my $ext = "log"; my $filename = "$b4_ext.$ext"; my $i = 2; while (-s $filename) { $filename = "$b4_ext-$i.$ext"; $i++; } return $filename; }
Trouble is, the builder method only gets run the first time I call the attribute. Subsequent calls of the attribute seems to just use the value already stored in it. This defeats checking for existence since the attribute will always just have the default logfile name and will overwrite it freely (later in the application). I want the builder, or at least its behavior, to run whenever the attribute is called. What's the right way to do it?

In reply to Moose: I want builder method to run every time I call an attribute by italdesign

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.