我有一个perl脚本,可以执行一些mysql连接来激活select查询。 我使用DBI perl模块来做同样的事情。
有时它会消耗100%的CPU并且什么都不做。我得到了gdb回溯的实时进程,而它消耗了99%到100%的cpu。
#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)
答案 0 :(得分:1)
有时,正则表达式处理可能需要永久,即使是适量的数据。
假设您有这样的正则表达式:
my $data =~ s!.*findit:(.+)!$1!gis;
这个正则表达式做的相同但速度要快得多:
my $data =~ s!\A.*findit:(.+)\z!$1!is;