Как и в моем комментарии, вы не должны использовать плоский файл для хранения информации о пользователе. Вы должны использовать правильную базу данных, которая будет обрабатывать параллельный доступ для вас, вместо того, чтобы разбираться и кодировать, как справляться со всем этим самостоятельно!
Если вы настаиваете на использовании массива, вы можете искать его с помощью grep (), если он не «слишком большой»:
if (grep /^$username:/, @incomingarray) {
print "user name '$username' is already registered, try again\n";
}
else {
print "user name '$username' is not already registered\n";
}
Я вижу и другие проблемы в вашем коде.
Вы всегда должны предпочитать лексические (мои) переменные пакетным (нашим) переменным.
Почему вы считаете (ошибочно), что $ name и $ username не могут быть лексическими переменными?
Вы всегда должны использовать 3-аргументную форму open () и проверять ее возвращаемое значение, как в вашем втором примере кода. Ваш open () в первом примере кода такой же, как и много лет назад.