I don't understand your question. First you say I need to remove a specified number of elements from the @_ array at once rather than the one-at-a-time that shift does, which your code does with splice.
But then you give it the same input as before, and expect the same outcome, even though you changed the code. Why did you even change the code if you don't want it to change? And how do you expect you will ever get more than two elements into @merge_list, when all you do is to create a new variable and assign to elements to it?