Обратите внимание, что данный код не работает, если ввод не в правильном формате. Вот что я бы сделал:
$rowfetch =~ s/[ '-]//g; #All chars inside the [ ] will be filtered out.
if($rowfetch =~ m/(\w+),([a-z])/i) {
printf $fh lc($2.$1);
}
позиционные переменные $ 1- $ 9 содержат последнее успешное совпадение, но они не сбрасываются в случае неудачных совпадений. Это означает, что если регулярное выражение не совпадает, $ 1 и $ 2 не будут стерты, и вы получите что-то другое, чем вы хотели.
Я также немного изменил регулярное выражение. Первая строка также удаляет пробелы. Поскольку создается впечатление, что вы создаете имена пользователей или адреса электронной почты, вам не нужны пробелы. Вторая строка более строгая, чтобы гарантировать, что $ 2 - это буква, а не какой-либо другой символ. 'I' в конце говорит Perl, чтобы все буквы соответствовали регистру. С этим мне не нужно делать эту вторую часть ([a-zA-Z]).