Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。












想改善这个问题吗?更新问题,以便将其作为on-topic用于堆栈溢出。

7年前关闭。



Improve this question




我有一个perl脚本,它执行一些mysql连接来触发select查询。
我使用DBI perl模块执行相同的操作。

有时它消耗100%的CPU,却什么也不做。在消耗了99%到100%的CPU的同时,我得到了实时进程的gdb回溯。
#0  0x0000003990a7c680 in memcpy () from /lib64/libc.so.6
#1  0x0000003992ae6e27 in Perl_regexec_flags () from /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/CORE/libperl.so
#2  0x0000003992a922d5 in Perl_pp_subst () from /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/CORE/libperl.so
#3  0x0000003992a8a39e in Perl_runops_standard () from /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/CORE/libperl.so
#4  0x0000003992a37ecc in perl_run () from /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/CORE/libperl.so
#5  0x00000000004017bc in main ()

我应该怎么办 ? (我正在使用CentOS 5.8版(最终版)kernel-2.6.18-308.el5)

最佳答案

有时,即使对中等数量的数据,正则表达式处理也可能需要花费很长时间。

假设您有一个这样的正则表达式:

my $data =~ s!.*findit:(.+)!$1!gis;

此regexp的作用相同,但速度更快:
my $data =~ s!\A.*findit:(.+)\z!$1!is;

10-06 08:47