You are trying to use symbolic references which are forbidden under strict refs

In most cases it's better to just use hash values.

hash slices make this easy:

my %time; @time{ qw(sec min hour ...) } = localtime(time);

Edit

or

my %time; my @pad = qw (sec min hour day month); @time{ @pad } = localtime(time);

Please note how this is more DRY than your redundant code.

The reason why symbolic references are deactivated by default "strictness" is that they result in very hard to spot errors.°

If you really need this kind of meta programming, you can still reactivate it with no strict 'refs' within the local scope.¹

Update

And to why it doesn't work with private lexicals, I suppose it has to do with the history of Perl 4 to 5, the former didn't have strict or lexical vars.

Cheers Rolf
(addicted to the Perl Programming Language :)
see Wikisyntax for the Monastery

°) Especially people inexperienced to hashes are prone to this.

FWIW: I've seen languages where this was the only way to emulate hashes, but Perl is not one of them.

¹) though you can already do all of this with %package:: stash or PadWalker or eval constructs


In reply to Re: What's so wrong with this (dereferencing)code? (Symbolic Refs) by LanX
in thread What's so wrong with this (dereferencing)code? by Maelstrom

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.