Какие символы, я должен выйти в Perl, предварительно скомпилировали regex?

Вы должны ввести два параметра типа в сигнатуру функции, один для Fn и один для Future, например

#![feature(futures_api, async_await)]

async fn foo() {}

fn run<G: std::future::Future, F: FnOnce() -> G>(f: F) {
    f();
}

fn main() {
    bar(foo)
}

Вы можете заменить FnOnce на Fn или FnMut в зависимости от ваших потребностей.

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

3 ответа

Необходимо выйти из разделителя для qr//, и необходимо выйти из любых regex метасимволов, которые Вы хотите использовать в качестве литералов. Если Вы хотите, чтобы это было литеральным *, необходимо выйти из них, так как * regex квантор.

Вашей проблемой здесь являются различные флаги regex, которые Вы добавили./m ничего не делает, потому что Вы не используете начало - или привязки конца строки (^, $)./s ничего не делает, потому что Вы не используете подстановочный знак. метасимвол./x делает весь пробел в Вашем regex бессмысленном, и это поворачивает ту строку с # в комментарий regex.

Это - то, что Вы хотите с удаленными флагами regex, и надлежащие вещи вышли:

my $sc = qr{(>|\s)};

my $re = qr{# using defaults found in \.config
\*
\*
Options:
$sc 1\. opt1
$sc 2\. opt2
choice\[1-2\?]: };

Хотя Damian Conway говорит людям в Лучших практиках Perl всегда помещать эти опции на свой regexes, Вы теперь видите, почему он неправ. Необходимо только добавить их, когда Вы хотите то, что они делают, и необходимо только добавить вещи, когда Вы знаете то, что они делают.:) Вот то, что Вы могли бы сделать, если Вы хотите использовать/x. Необходимо выйти из любого литерального пробела, необходимо обозначить окончания строки так или иначе, и необходимо выйти из литерала # символ. Что было читаемо, прежде чем будет теперь путаница:

my $sc  = qr{(>|\s)};
my $eol = qr{[\r\n]+};

my $re  = qr{\# \s+ using \s+ defaults \s+ found \s+ in \s+ \.config $eol
\*                    $eol
\*                    $eol
Options:              $eol
$sc \s+ 1\. \s+ opt1   $eol
$sc \s+ 2\. \s+ opt2   $eol
choice\[1-2\?]: \s+
}x;

if ( $output =~ $re ) {
  print "OK!\n";
}
else {
  print "D'oh!\n";
}
14
ответ дан 18 December 2019 в 06:52
поделиться

Как сказанный brian, необходимо выйти из разделителя и regex метасимволов. Отметьте это при использовании qr//x (который Вы), необходимо также выйти из пробельных символов и # (который является маркером комментария). Вы, вероятно, на самом деле не хотите использовать /x здесь. Если Вы хотите быть в безопасности, можно выйти из любого небуквенно-цифрового знака.

2
ответ дан 18 December 2019 в 06:52
поделиться

Походит на то, что Вы действительно хотите, Ожидают, но вещью, которую Вы наиболее ищете, является quotemeta оператор, который выходит из всех символов, которые имеют особые значения к regex.

Отвечать на Ваш вопрос непосредственно (однако), в дополнение к закрывать кавычки символу (в этом случае }) необходимо выйти как минимум, .[$()|*+?{\

7
ответ дан 18 December 2019 в 06:52
поделиться
Другие вопросы по тегам:

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