in reply to trapping ctrl-d

You don't really need to stop the user from sending an EOF, you just need to keep prompting for input until you get what you want:
until ($condition) { # Keep reading from STDIN. # Store and/or process the input. }