Ответ 1
Используйте $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
означает, что нужно применять глобально).