$myString =~ s/^\s*(.*?)\s*$/$1/;
Это обрезает пробелы с обеих сторон.
справа:
$myString =~ s/\s*$//;
Если ваше белое пространство - это просто пробелы, то следующий код удалит все пробелы:
$mystring =~ tr/ //ds;
sub trim($)
{
my $string = shift;
$string =~ s/^\s+//;
$string =~ s/\s+$//;
return $string;
}
print trim($myString)
Попробуйте:
# Delete leading/trailing whitespace.
$string =~ s/^\s+|\s+$//g;
sub trim
{
my $str = $_[0];
$str=~s/^\s+|\s+$//g;
return $str;
}
print trim(" 4 ");
Просто просматривая вашу программу, я обнаружил 3 места, которые можно улучшить или исправить.
Прошу прощения, если мой код плохо отформатирован. : - (
В вашей функции parse_block (...) есть 3 элемента, требующие внимания.
@attribs = $attribs =~ /\s*(\w+\s+=\s+\w+\s+|\w+\s+=\s+".*?"|\w+\s+=\s+<.*?>)\s*/g;
Чтобы убрать пробелы после vid => '6', просто не включайте \ s + в конец вашего первого подрегулярного выражения.
Запишите его как:
@attribs = $attribs =~ /\s*(\w+\s+=\s+\w+|\w+\s+=\s+".*?"|\w+\s+=\s+<.*?>)\s*/g;
$value = [ parse_type_value_specifier( $start_tail ) ];
Вместо этого вы хотите следующее:
$value = [ parse_type_value_specifier( $value ) ];
(Обратите внимание, что параметром функции должно быть $ value, а не $ start_tail.) Вы, вероятно, не заметили this.
В цикле для @attributes 'else' в условии if / else срабатывает, когда 'value' имеет простое значение (нет элементов "" или <...> в 'value').
Обновление: параметр в
parse_type_value_specifier(...)изменен на $ value. Он был (неправильно) указан как $ attrib.
Еще одно возможное альтернативное решение - Text :: Trim из CPAN, которое «удаляет начальные и / или конечные пробелы из строк». Он имеет функцию подстройки
, которая может удовлетворить ваши потребности.
Вот подпрограмм, который позволит вам удалить ведущий и затягивающий пробел из строки, а также удаляя избыток пробелы в пределах строки и замена его одним пространством.
Sub unspace { мой @stringer = @_? @_: $ ; $ = join ('', разделение ('')) для @Stringer; Вернуть желание? @Striinger: «@Stringer»; }
$ MySpacedString = 'String с двойными пробелами вкладками и другими областями пробелов. '; $ Mycleanstring = unspace ($ myspacedstring);