Используйте $data =~ s/ +/ /;
вместо.
Пояснение:
tr
- это оператор translation . Важно отметить, что модификаторы регулярных выражений не применяются в операторе перевода (за исключением -
, который по-прежнему указывает диапазон). Поэтому, когда вы используете
tr/ +/ /
вы говорите: "Возьмите каждый экземпляр пробела и +
и переведите их в пробел". Другими словами, tr
рассматривает пробел и +
как отдельные символы, не регулярное выражение.
Демонстрация:
$data = "What is the STA++TUS of your mind right now?";
$data =~ tr/ +/ /;
print $data; #Prints "What is the STA TUS of your mind right now?"
Использование s
делает то, что вы ищете, говоря: «сопоставьте любое количество последовательных пробелов (хотя бы один экземпляр) и замените их одним пробелом». Вы также можете использовать что-то вроде
s/ +/ /g;
если есть несколько мест, где вы хотите, чтобы произошла замена (g
означает глобальное применение).