That would have to be
push @{$this->{fields}}, $val.
push requires a @-value, not a reference to a @-value, as its first argument.
On a more general note, the way to think about an object in Perl is that it's a hash that knows how to call functions. So, if you want to push a value onto an array and a reference to that array is stored in the object, you treat it just like an array. Using bless just means it knows how to call functions in a given package. (There's a little more to it, but that's basically the gist.)