I hope this is not homework. Some suggestions that I could quickly come up with are:
- Use "use strict;" and "use warnings;" in the code (atleast during development).
- Minor nitpick: Use a better named variable than "$errorstate". Using "$errorstate = 1" to indicate that valid sshport was input is confusing. I would have used a name like "$isvalidport", etc.
- Instead of reading in the port value from <STDIN>, pass it as a cmdline argument.
- Port numbers are limited to 65535 max. So, a value larger than that should be treated as invalid data.
- Instead of using s/.../.../ to modify $_, why not print the new line "Port $sshport" to SSHD_CONFIG_NEW directly? I feel the substition operation is not required. The current print statement can be moved inside an else block.
- Please close the opened file handles before calling rename(...)
- You should check the return status of the rename(...) command.