My personal preference is your third option. Only two lines of code (and less code is easier to read, normally) and it's obvious the die statement only executes if the number of arguments is not 2.
Comment on Re: Best practices for processing @ARGV ?