The only recursive call you have passes an array that you just declared and assigned in a minimal scope around the recursive call. The values you're modifying within the call are thrown away when that scope ends. It's not clear to me what you want to be modified. Do you expect $_->content_list() to return different values after the recursive call?
in reply to Modifying a parameter to a recursive function
bellaire gave a good example of the sort of value-modification you seem to want.
Caution: Contents may have been coded under pressure.