in reply to how can I get localtime without mutating any variables

G'day thirtySeven,

Welcome to the Monastery.

I see you've indicated that ++hippo's solution is what you want.

You did say "without mutating any variables"; however, that solution will require mutating variables, e.g.:

$mon += 1; $yr += 1900;

See localtime for an explanation of that.

My local time:

$ date Thu, 7 Jan 2021 09:03:14

Values from localtime:

$ perl -E 'say for (localtime)[1..5]' 3 9 7 0 121

There is a built-in module, Time::Piece, that will handle those extra calculations for you. See the documentation for a variety of ways to use that module. For a direct comparison with the output from localtime above:

$ perl -E 'use Time::Piece; my $t = localtime; say $t->$_ for qw{min h +our mday mon year}' 3 9 7 1 2021

Note that Time::Piece was released with Perl 5.10.0 — see "perl5100delta: New modules" — so you'll need that version or later to use this. If you are working with an older version, I'd recommend updating: the latest stable version is 5.32.0.

— Ken