What I wondered about was why my original version gave that error.
In looking at the source for List::Compare I see that the first thing the new() method does is shift the class name from @_. Since I only provided two arguments the first one got shifted and the error is produced since there is only one remaining. I suppose when you use the correct '->' syntax to call new() it puts a copy of the class name into @_ as the first item. I see in the link you provided, Method Invocation, that this is correct.
The syntax I used accidentally is for calling a package subroutine so it accessed new() directly.