in reply to Template Toolkit and unpredictable hashrefs
Your call is actually a method invocation,
# Template Toolkit ip.counter # Perl ip->counter()
So for the obvious reason, that should not return a result. To prevent the call from blowing up, TT will silently ignore these types of errors.
As ikegami showed you how to fix your error I will offer you advice. Avoid doing data management or manipulation in your templates. The feedback mechanism for errors is poor and the syntax is harder to work with than pure perl. Move more of your data management into Template plugins where you can use pure perl to do the work. Otherwise prepare the data so it is easier to work with before you send it to the template. A good example is that I never use hashes in templates. Better to use objects as they will act like you expect.