- RU.PERL ----------------------------------------------------------- RU.PERL - Msg : #1043 [644] От : Sergey E.Sumin 2:5025/17 31 октября 03, 10:14 Кому : All 01 ноября 03, 05:31 Тема : Re: Как посимвольно обработаь строку ------------------------------------------------------------------------------- From: "Sergey E.Sumin"Здравствуйте! Hу если тебе надо посимвольно, то надо писать for (0..length($a)-1) { $b .= substr($a,$_,1)."z"; } что я бы переписал $b = join "",map {substr($a,$_,1)."z"} 0..length($a)-1; у тебя 1. не работает, очевидно, имелось ввиду for (split(//)) { print; print "z"; } 2. не посимвольно: производится разбиение на массив (кстати, при помощи регулярного выражения), а потом отрабатывается массив, а не изначальная строка 3. потенциально опасно, поскольку a)'//' IMHO означает использовать предыдущее регулярное выражение, ну, у тебя в данном конкретном случае его не было, тебе повезло; b) неаккуратное обращение с $_, перед циклом там строка, после - последний символ, ты можешь запутаться в собственных шнурках. И имей ввиду, что моя конструкция работает в 2 раза быстрее твоей, а нормальная для перла конструкция s/(.)/$1z/g работает примерно в 4(!) раза быстрее моей и в 10 (!!!) раз быстрее твоей. Достоинство (и недостаток) перла в том, что на нем можно писать не только в стиле перла, но и в стиле других языков (то есть стилистически правильно и стилистически неправильно). Hо, к счастью (и к несчастью), программы в стиле перл работают быстрее. Сергей Сумин. "eugene v." wrote in message news:1067561906@p1.f245.n5025.z2... > Hi Rinat. > > >> foreach $i (1..length($a)) > >> но не работает. > R> Странно, весьма странно :) > R> #!/usr/bin/perl -w > R> use strict; > R> my $a = 'This is a text'; > R> $a =~ s/(.)/$1z/g; > R> print "$a\n"; > так и я могу мне бы посимвольно. > вообщем решение найдено > > while(split(//)) > { > print; > print "z"; > } > > \\ Евгений > --- Microsoft Outlook Express 6.00.2800.1106 * Origin: RELEX Inc. (2:5025/17@fidonet)