I usually use this config for perltidy that mirrors (mostly) the recommendations from Perl Best Practices (and it uses 4 spaces).
## PBP perltidy RC file
-l=78 # Max line width is 78 cols
-i=4 # Indent level is 4 cols
-ci=4 # Continuation indent is 4 cols
-st # Output to STDOUT
-se # Errors to STDERR
-ce # cucddled elsen (XXX my pref)
-vt=2 # Maximal vertical tightness
-cti=0 # No extra indentation for closing brackets
-pt=1 # Medium parenthesis tightness
-bt=1 # Medium brace tightness
-sbt=1 # Medium square bracket tightness
-bbt=1 # Medium block brace tightness
-nsfs # No space before semicolons
-nolq # Don't outdent long quoted strings
-wbb="% + - * / x != == >= <= =~ !~ < > | & >= < = **= += *= &= <<= &&
+= -= /= |= >>= ||= .= %= ^= x="
# Break before all operators
At first glance nothing about your sample file there looks particularly egregious (although your usage of prototypes is maybe a bit suspect; in most cases unless you're trying to affect how perl parses things in a weird way you don't want to use them (that being said the new signatures are a slightly different story)).
Edit: Also after another closer read looking at what the code's doing rather than formatting it looks like you may be reimplementing an existing wheel (see e.g. Data::Diver).
The cake is a lie.
The cake is a lie.
The cake is a lie.