Forum Webscript.Ru

Программирование => Perl => Тема начата: FANTAzeRus от 21 Ноября 2003, 09:58:43

Название: Perl vs Текст
Отправлено: FANTAzeRus от 21 Ноября 2003, 09:58:43
my @cs = ("A".."Z","a".."z",0..9);
my $text = join("",@cs[map { rand @cs } (1..9)]);

В результате получим случайную последовательность из 9 символов. Как вставить между этими символами произвольный разделитель, через n символов???
Название: Perl vs Текст
Отправлено: ondr от 21 Ноября 2003, 10:38:19
my $n = 3;
my $chr = \'A\';
$text =~ s/^(.{\\Q$n\\E})(.*)$/$1$chr$2/;
Название: Perl vs Текст
Отправлено: FANTAzeRus от 21 Ноября 2003, 10:52:08
Прошу прощения, я хотел сказать через КАЖДЫЕ n символов!
Название: Perl vs Текст
Отправлено: ondr от 21 Ноября 2003, 11:03:51
my $n = 3;
my $chr = \'-\';
$text = join $chr, $text =~ /(.{1,\\Q$n\\E})/g;
Название: Perl vs Текст
Отправлено: FANTAzeRus от 21 Ноября 2003, 11:08:41
Спасибо!
Название: Perl vs Текст
Отправлено: metton от 21 Ноября 2003, 11:10:34
2ondr
Не понял смысла {\\Q$n\\E}
Что значат \\Q и \\E вообще? (не понимаю, что значит "цитировать (де-мета) символы до \\E" - так написано в "программировании на perl")
И что значат в они же в квантификаторах?


Чтобы вставлять через каждые n символов, можно изменить вариант ondr-а так:

my $n = 3;
my $chr = \'A\';
$text =~ s/\\G(.{$n})/$1$chr/g;
Название: Perl vs Текст
Отправлено: NeoNox от 21 Ноября 2003, 11:33:57
perldoc perlfaq6
perldoc perlre
Название: Perl vs Текст
Отправлено: metton от 22 Ноября 2003, 12:22:58
2NeoNox
Въехал. \\Q действует как \\ только сразу на много символов?
Но если так, зачем эскейпить $ в квантификаторе? Разве может $ встречаться как метасимвол в квантификаторах типа {m, n}?