That's because you have tied the top level hash. In order for
Perl to store a value into $hash {toby} {ip}, Perl
first has the fetch $hash {toby}, and that's the
FETCH you are seeing.
What you should be doing is tie the top level hash to another
class, where a FETCH first looks if there's already a value -
if not, it creates a tied hash (of your original class) first.