LINUX.ORG.RU

Эффективная реализация экранирования в Perl


0

0

Есть строка $str в которой могут быть символы с кодами от 0 до 127.
Требуется - для символов с кодами от 00h до 1Fh сделать замену
<символ с кодом NNh> --> \NN
Естественно слэш нужно тоже экранировать - \\

Т.к. реализовать нужно на Perl'e и эффективно - встаёт задача,
какими средствами пользоваться?

Возможно регулярные выражения? Но насколько они эффективны?
Не берусь судить не зная их внутренней реализации!

Не по основной теме -- реализация regexp в perl очень эффективна.
По основной -- самый просто вариант
s/\\/\\\\/g;
s/([\x0-\x1F])/"\\".ord ($1)/ge;

Zulu ★★☆☆
()
Ответ на: комментарий от Zulu

>Не по основной теме -- реализация regexp в perl очень эффективна. 
>По основной -- самый просто вариант 
>s/\\/\\\\/g; 
>s/([\x0-\x1F])/"\\".ord ($1)/ge;

Т.е. эта реализация будет работать не медленнее чем 
просто посимвольный проход по строке с заменой (если это необходимо)?

Регулярные выражения покрывают огромный класс множеств и поэтому
(именно из-за обобщённости) есть сомнения, что для каждого 
КОНКРЕТНОГО частного случая они эффективнее!

Krivenok_Dmitry
() автор топика
Ответ на: комментарий от Krivenok_Dmitry

*пожимая плечами* man Devel::DProf в руки...

Zulu ★★☆☆
()
Ответ на: комментарий от Krivenok_Dmitry

> Т.е. эта реализация будет работать не медленнее чем
> просто посимвольный проход по строке с заменой (если это необходимо)?

Если скорость - главная цель, то вопрос поставлен неверно с самого
начала. Пиши на С.
Если скорость - главная цель именно в это конкретной подзадачке
"экранирования" - сделай XS модуль на C и вызывай из Perl.
Если сомневаешься - делай benchmarking, че попусту трепаться :-)

Onanim
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.