Я изучаю Perl, поэтому, пожалуйста, несите меня за этот вопрос noob.
Как я повторяю символ n раз в строке?
Я хочу сделать что-то вроде ниже:
$numOfChar = 10;
s/^\s*(.*)/' ' x $numOfChar$1/;
Ответ 1
По умолчанию подстановки берут строку как часть для замены. Чтобы выполнить код в процессе подстановки, вы должны использовать флаг e.
$numOfChar = 10;
s/^(.*)/' ' x $numOfChar . $1/e;
Это добавит пробел $numOfChar к началу вашего текста. Чтобы сделать это для каждой строки текста, используйте флаг -p (для быстрой однострочной обработки):
или если он является частью более крупного script, используйте флаги -g и -m (-g для глобальных, то есть повторная подстановка и -m, чтобы сделать ^ совпадением в начале каждой строки ):
$n = 10;
$text =~ s/^(.*)/' ' x $n . $1/mge;
Ответ 2
Ваше регулярное выражение может быть записано как:
$numOfChar = 10;
s/^(.*)/(' ' x $numOfChar).$1/e;
но - вы можете сделать это с помощью
s/^/' ' x $numOfChar/e;
Или без использования регулярных выражений вообще:
$_ = ( ' ' x $numOfChar ) . $_;
Ответ 3
Ты прав. Оператор Perl x повторяет строку несколько раз.
print "test\n" x 10; # prints 10 lines of "test"
РЕДАКТИРОВАТЬ: Чтобы сделать это в регулярном выражении, было бы лучше всего (a.k.a. большинство поддерживающих сторонников) просто присвоить значение другой переменной.
my $spaces = " " x 10;
s/^\s*(.*)/$spaces$1/;
Есть способы сделать это без дополнительной переменной, но это всего лишь мои 0,02 доллара, что будет легче поддерживать, если вы сделаете это таким образом.
EDIT: я исправил свое регулярное выражение. Извините, я не читал его в первый раз.