in reply to return ref is better ?

Depends on the situation. Refs are more efficient when you're dealing with larger datasets, but less comfortable for people who aren't as accustomed to dealing with them.

My personal practice is to always return refs because it lets me concentrate on more important things than trying to remember which functions return refs and which return arrays/hashes. Always returning arrays/hashes would have this same benefit, of course, but doesn't allow for returning multiple array/hash results.

And then there's the option of using wantarray to return refs in scalar context and arrays/hashes in list context. In theory, it seems like it could provide the best of both worlds by letting the caller get the result in whatever form they want, but it's not a habit I've cultivated. And it also doesn't work for returning multiple array/hash results.