【问题标题】:How to make Perl regex precompiled to save time during runtime如何使 Perl 正则表达式预编译以在运行时节省时间
【发布时间】:2018-10-23 13:16:21
【问题描述】:

我有一个如下所示的 Perl 函数,它需要更长的时间来执行。 (注意:这个函数被调用超过 10,000 次。)

在谷歌上搜索了一些之后,我发现 如果我可以预编译 Perl 正则表达式,那么执行时间可能会减少。

如何修改 Perl 正则表达式以减少时间?还是有更好的解决方案?

sub some_func {
    my $var1=shift;
    my $var2=shift;

    if (!($var1 =~ /^UTF-?8$/)) {
         print "Do something important\n";
    }
    if ($var2 =~ /$some_global_string/i) {
         print "Do something important\n";
    }
}

例如,$var2 可以是

"character string with maximum 4096 character, Including html character as string"

$some_global_string 可以是:

"string as $var2 but max length of 256 character"`

【问题讨论】:

标签: regex perl


【解决方案1】:

http://perldoc.perl.org/perlop.html#Regexp-Quote-Like-Operators

my $RE1 = qr/^UTF-?8$/;
my $RE2 = qr/$some_global_string/i;
....
if ($var1 !~ /$RE1/) {...};
...
if ($var2 =~ /$RE2/) {...};

【讨论】:

  • 谢谢,请确认一下,这是 $var1 !~ 还是 $var1 =~ ??
  • 这完全取决于您的用例@Chirag。如果您进行正面或负面匹配并不重要。相关信息是 qr// 运算符创建了一个预编译模式,您可以在更大的范围内或使用 state 进行此操作。
  • 好的,谢谢,我只是想检查一下是故意还是错字:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-07
  • 2012-08-04
  • 1970-01-01
  • 2010-10-31
  • 2017-09-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多