You need to use strictures, which enable messages telling you what's wrong: use strict; use warnings;. You need to import say, eg with use feature 'say';. Also, you didn't assign the coderef to $method, so there's nothing to go to with goto. And since you're (wisely) not doing string eval, you don't need the eval block (but if you do need it for compatibility with other code, check that $method has been assigned a coderef before trying to execute it). And you need to use Carp; if you're going to put it in your code (but the way it's used, die() would be adequate).

See the following:

#! /usr/bin/env perl package Foo; use strict; use warnings; use feature 'say'; sub AUTOLOAD { (my $method = our $AUTOLOAD) =~ s/.*:://; return if $method eq 'DESTROY'; say "Foo::$method was called"; die "bad method $method\n" if $method ~~ [qw/troz narf/]; if ($method eq 'day') { return +(localtime)[3]; } elsif ($method eq 'month') { return +(localtime)[4] + 1; } } package main; use strict; use warnings; use feature 'say'; say( Foo->day ); say( Foo->troz ); __END__ Foo::day was called 25 Foo::troz was called bad method troz

In reply to Re: say statements within 'sub AUTOLOAD' by Anonymous Monk
in thread say statements within 'sub AUTOLOAD' by ianyappy

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.