Как я использую пакет Perl, известный только во времени выполнения?

Это то, что я хотел бы использовать.
(?<=(
))(\w|\d|\n|[().,\-:;@#$%^&*\[\]"'+–/\/®°⁰!?{}|`~]| )+?(?=(
))

В основном, что он делает:

(?<=(

)) Выбор должен быть добавлен с тегом 
 

(\w|\d|\n|[().,\-:;@#$%^&*\[\]"'+–/\/®°⁰!?{}|~]| ) Это просто регулярное выражение, которое я хочу применить. В этом случае он выбирает символ буквы или цифры или символ новой строки или некоторые специальные символы, перечисленные в примере в квадратных скобках. Символ трубы | просто означает «ИЛИ».

+? Плюс символьные состояния для выбора одного или нескольких из вышеуказанного порядка не имеют значения. Вопросительный знак изменяет поведение по умолчанию от «жадного» до «неровного».

(?=(

)) Выбор должен быть добавлен тегом
 

В зависимости от вашего варианта использования вам может потребоваться добавить некоторые модификаторы, такие как (i или m)

  • i - нечувствительность к регистру
  • m - multi -line search

Здесь я выполнил этот поиск в Sublime Text, поэтому мне не пришлось использовать модификаторы в моем регулярном выражении.

Javascript не поддерживает lookbehind

Вышеприведенный пример должен отлично работать с такими языками, как PHP, Perl, Java ... Javascript, однако, не поддерживает lookbehind, поэтому мы должны забыть об использовании (?<=(

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

Также посмотрите на JAVASCRIPT REGEX DOCUMENTATION для не захватывающие круглые скобки

16
задан brian d foy 14 January 2009 в 22:44
поделиться

5 ответов

eval "require $ENV{a}";

" use" не работает хорошо здесь, потому что это только импортирует в контексте eval.

, Поскольку @Manni сказал, на самом деле, лучше использовать, требуют. Заключение в кавычки от man perlfunc:

If EXPR is a bareword, the require assumes a ".pm" extension and 
replaces "::" with "/" in the filename for you, to make it easy to 
load standard modules.  This form of  loading of modules does not 
risk altering your namespace.

In other words, if you try this:

        require Foo::Bar;    # a splendid bareword

The require function will actually look for the "Foo/Bar.pm" file 
in the directories specified in the @INC array.

But if you try this:

        $class = 'Foo::Bar';
        require $class;      # $class is not a bareword
    #or
        require "Foo::Bar";  # not a bareword because of the ""

The require function will look for the "Foo::Bar" file in the @INC 
array and will complain about not finding "Foo::Bar" there.  In this 
case you can do:

        eval "require $class";
9
ответ дан 30 November 2019 в 16:50
поделиться

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

my $module = "Foo::Bar";
eval "require $module";
9
ответ дан 30 November 2019 в 16:50
поделиться

Я использовал бы UNIVERSAL:: потребуйте . Это имеет и , требуют и использование методы использовать пакет. использование метод будет также звонить импорт для пакета.

use UNIVERSAL::require;
$ENV{a}->use or die 'Could not import package:  ' . $@;
6
ответ дан 30 November 2019 в 16:50
поделиться

Вы, вероятно, хотите использовать require вместо use, если Вы не хотите, чтобы это произошло во время компиляции и затем вручную, импортируете символы, Вам, возможно, понадобилось бы. См. эта ссылка на Поваренную книгу Perl (от Google Books) для хорошего обсуждения методов, которые можно использовать для достижения того, что Вы хотите.

4
ответ дан 30 November 2019 в 16:50
поделиться

Я думаю, что модулем, загруженным во времени выполнения, может быть Плагин. У меня есть этот вид проблемы, имея определенные модули к некоторым случаям, которые загружаются во время выполнения как плагины с Модуль:: Сменный .

, Возможно, необходимо изменить логику модулей, но она работает, и масштабируйтесь очень хорошо (мое приложение, запущенное с четырех модулей, и теперь имейте двадцать, и это растет).

4
ответ дан 30 November 2019 в 16:50
поделиться
Другие вопросы по тегам:

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