Perl qr//и замена

В моем последнем -Viajeros.com проекта - я использовал комбинацию нескольких методов. Я не знал бы, как организовать веб-приложение - Viajeros является сайтом социальной сети для путешественников с четко определенными разделами, таким образом, довольно легко разделить код для каждой области.

я использую моделирование пространства имен и ленивую загрузку модулей согласно разделу сайта. На каждой загрузке страницы я объявляю объект "vjr", и всегда загружаю ряд общих функций в него (vjr.base.js). Тогда каждая страница HTML решает, в котором модули нуждаются с простым:

vjr.Required = ["vjr.gallery", "vjr.comments", "vjr.favorites"];

Vjr.base.js получает каждый gzipped от сервера и выполняет их.

vjr.include(vjr.Required);
vjr.include = function(moduleList) {
  if (!moduleList) return false;
  for (var i = 0; i < moduleList.length; i++) {
    if (moduleList[i]) {
      $.ajax({
        type: "GET", url: vjr.module2fileName(moduleList[i]), dataType: "script"
      });
    }
  }
};

Каждый "модуль" имеет эту структуру:

vjr.comments = {}

vjr.comments.submitComment = function() { // do stuff }
vjr.comments.validateComment = function() { // do stuff }

// Handlers
vjr.comments.setUpUI = function() {
    // Assign handlers to screen elements
}

vjr.comments.init = function () {
  // initialize stuff
    vjr.comments.setUpUI();
}

$(document).ready(vjr.comments.init);

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

6
задан skaffman 8 March 2012 в 15:17
поделиться

2 ответа

Как указывает хаос, вы столкнетесь с некоторыми трудностями при использовании qr // . Вам действительно нужно предварительно скомпилировать шаблон? В противном случае может сработать такая стратегия:

my $pattern      = 'matt';
my $text         = 'Matt';
my $rep_text     = 'Matthew';
my $pattern_opts = 'i';

print $text, "\n" if $text =~ s/(?$pattern_opts:$pattern)/$rep_text/;

Обновление в ответ на ваш новый код : вы можете подумать об использовании такого подхода:

my ($orig, $patt, $rep, $flags) = qw(FooFooFoo foo bar ig);

my $make_replacement = $flags =~ s/g//        ?
    sub { $_[0] =~ s/(?$flags:$patt)/$rep/g } :
    sub { $_[0] =~ s/(?$flags:$patt)/$rep/  }
;

if ( $make_replacement->($orig) ){
    print $orig;
}
else {
    print "Failed...";
}
11
ответ дан 8 December 2019 в 13:01
поделиться

Запустите его с -r "matt" , а не -r "/ matt /" . Вам не нужно и, по сути, нельзя предоставлять разделители шаблонов в строке параметров. Кавычки являются разделителями в вашем qr . Так что он на самом деле ищет матовый с косой чертой вокруг него, то, как вы его используете, а это не то, что вам нужно. Вы пытаетесь использовать кавычки, чтобы указать Perl обрабатывать вашу строку шаблона как исходный код, но, к сожалению, вы не можете этого сделать.

Все эти добавления шаблона, которые вы делаете для других параметров, также не будут Работа. Вам нужно будет изменить способ компиляции регулярного выражения, если вы хотите все это сделать. Что-то вроде этого может сделать это для / i и / s :

my $compd_pattern = qr/$pattern/ or die $@;
$compd_pattern = qr/$compd_pattern/i if $options{i};
$compd_pattern = qr/$compd_pattern/s if $options{s};

Для / g вам потребуется поддержка альтернативной версии поиска / замены. / g не является допустимым модификатором для qr // .

7
ответ дан 8 December 2019 в 13:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: