I would agree different individuals have different needs and perspective of Perl, and so this is mine.
Perl is greatly influenced by C in those days and OO is really very much an afterthought, hence even the OO constructor used is in the form of method invocation as
It is simply sugar syntax to use
My stand is if you were to expect Perl to be as consistent as some really strong typed languages like Java and C++, I suspect it would really take some going against the flow of what Perl represent. Perl is a glue language, its job is not really so much on performance and consistency. If it is, the syntax alone would greatly betray itself. The parser of Perl in my understanding of context free programming language, don't even fit in. There are just so much context required to parse Perl properly, and deliberateness of programmers to just help Perl in the parsing during ambiguous syntax. Just read up the map documentation using "perldoc -f map" and you will read the following
...
"{" starts both hash references and blocks, so "map { ..." could
be either the start of map BLOCK LIST or map EXPR, LIST. Because
Perl doesn't look ahead for the closing "}" it has to take a guess
at which it's dealing with based on what it finds just after the
"{". Usually it gets it right, but if it doesn't it won't realize
something is wrong until it gets to the "}" and encounters the
missing (or unexpected) comma. The syntax error will be reported
close to the "}", but you'll need to change something near the "{"
such as using a unary "+" or semicolon to give Perl some help:
%hash = map { "\L$_" => 1 } @array # perl guesses EXPR. wrong
%hash = map { +"\L$_" => 1 } @array # perl guesses BLOCK. right
%hash = map {; "\L$_" => 1 } @array # this also works
%hash = map { ("\L$_" => 1) } @array # as does this
%hash = map { lc($_) => 1 } @array # and this.
%hash = map +( lc($_) => 1 ), @array # this is EXPR and works!
%hash = map ( lc($_), 1 ), @array # evaluates to (1, @array)
...
Perl today is a mixture of OO, procedural and functional. OO is really nothing more than a modular packaging for the language, however we might see more in Perl6, but Perl6 is another set of nightmare.
For datetime, my opinion is stick with native integral unix epoch. Many OO date time classes will convert inputs of various formats into it simply because it is the most effective for storage, formatting, processing, and comparison. It will also allow you to easily pass between various languages whether via interoperability conduits such as HTTP, JSON, XML and definitely works extremely compatible when you need to touch on XS (interface to C/C++)