The OpenNET Project
 
Поиск (ключи):    ПРОГРАММЫ СТАТЬИ СОВЕТЫ ФОРУМ
  WIKI НОВОСТИ (+) MAN'ы ДОКУМЕНТАЦИЯ

Как в Perl оптимально заменить символы в строке или разбить строку на части
При работе с большими строками нужно избегать внутреннего копирования строк, 
которое происходит при использоании регулярных выражений или оператора split.

Для разбиеная строки вида "small_begin:big_end" на две подстроки используем:
   my $pos=index($str, ':');
   my $begin_str = substr($str, 0, $pos,""); 
   # в $str остается только big_end часть, в $begin_str - "small_begin:"

Соответсвенно, для замены символов удобно использовать:
    substr(строка, начало замены, число заменяемых символов, блок на который заменяем);
 
30.11.2004
Раздел:    Корень / Программисту и web-разработчику / Perl / Переменные в Perl

Обсуждение [ RSS ]
 
  • 1.1, bm, 15:00, 30/11/2004 [ответить] [смотреть все]
  • +/
    А не удобнее ли использовать для замены регулярные выражения вроде:
    $str =~ s/h/j/g;

    Заменит во всей строке символы h на j.

     
  • 1.2, Игорь, 06:34, 02/12/2004 [ответить] [смотреть все]
  • +/
    разбить или выделить:
    ($str1, $str2, str3 ...) = split (":", $string);
    замена:
    $string =~ s/xaker/maker/g;
     
     
  • 2.3, Maxim Chirkov, 09:32, 02/12/2004 [^] [ответить] [смотреть все]
  • +/
    >разбить или выделить:
    >($str1, $str2, str3 ...) = split (":", $string);

    Господа, речь идет про исключение лишних копирований в памяти. На досуге, возмите  в качестве $string строку размером несколько Мб и посмотрите сколько будет занимать процесс perl в памяти после split и "=~" (кстати сказать, простейшие замены с совпадением размера память лишнюю не потребляют).


     
     
  • 3.4, Игорь, 06:45, 03/12/2004 [^] [ответить] [смотреть все]
  • +/
    При таких объемах это естественно.
    Perl для небольших объемов расчитывался.
    Выход: написать на си подпрограмму или скомпилить скрипт в бинарник
    perl2bin
     
     
  • 4.6, Maxim Chirkov, 10:40, 03/12/2004 [^] [ответить] [смотреть все]
  • +/
    >При таких объемах это естественно.
    >Perl для небольших объемов расчитывался.

    Лишние копирования сильно паразитируют в циклах и для маленьких строк.

    >Выход: написать на си подпрограмму

    Не всегда критический участок поддается такому преобразованию, когда напирмер, используются хэши или регекпсы.

    > или скомпилить скрипт в бинарник perl2bin

    При цикличных операциях выйгрыша не будет, так как скрипт уже переведен в псевдокод.


     
  • 4.8, achmed, 15:57, 13/12/2004 [^] [ответить] [смотреть все]  
  • +/
    даже если писать на компилируемом языку (например Си),
    скорость при использовании регулярных выражений (библиотек
    много разных) будет медленнее чем при использовании
    стандартных функций для работы со строками, за удовство
    приходится платить скоростью.
     
  • 1.5, agility_member, 09:11, 03/12/2004 [ответить] [смотреть все]  
  • +/
    а awk или sed ?
     
  • 1.7, mic, 07:17, 09/12/2004 [ответить] [смотреть все]  
  • +/
    Где-то недавно видел статейку на английском про оптимизацию этого процесса Щас ... весь текст скрыт [показать]
     
  • 1.9, tor, 22:57, 14/06/2009 [ответить] [смотреть все]  
  • +/
    Если добавить use strict; то результат изменится :-)
     

    Ваш комментарий
    Имя:         
    E-Mail:      
    Заголовок:
    Текст:

     Добавить заметку
     Версия для печати
     
     Поиск заметки:
     

    Последние заметки
    - 12.05 Организация шифрованного бэкапа с помощью rdiff-backup, encfs и Dropbox
    - 11.05 Настройка беспроводного соединения в Debian GNU/Linux
    - 07.05 Использование Google Drive в Linux
    - 18.04 Использование нескольких сетевых стеков в Linux
    - 15.04 Восстановление стандартного KDE меню после его удаления (например, wine)
    - 11.04 Настройка gmirror при использовании GPT во FreeBSD 9
    - 09.04 Маршрутизатор на базе FreeBSD с приоритизация трафика средствами PF и ALTQ
    - 02.04 Частичное восстановление данных MySQL из бэкапа, созданного с использованием LVM
    - 21.03 Настройка DNSSEC в BIND 9.9
    - 17.03 Набор номера на Cisco IP Phone 7960/7940 из скрипта
    RSS | Следующие 15 записей >>


    ПОДПИШИСЬ НА ЖУРНАЛ Linux Format 2012!

    Журнал "Linux Format" (Линукс Формат)- Единственный в России и странах СНГ журнал на русском языке, посвящённый Linux и свободному ПО. Журнал для IT-директоров, IT-менеджеров, программистов, системных администраторов, учителей школ и преподавателей ВУЗов и всех пользователей ПК. В каждом выпуске: Новости индустрии OpenSource, обзоры новинок свободного ПО, обучающие и методические статьи.

    Каждый, кто оформит подписку, получает бонусы и подарки- объёмные наклейки на системный блок, диск с архивом номеров за 2005-2011 г.г. и ежемесячно электронную версию журнала в pdf-формате.

    Оформить подписку на год


      Закладки на сайте
      Проследить за страницей
    Created 1996-2012 by Maxim Chirkov  
    ДобавитьРекламаВебмастеруГИД  
    RUNNet TopList