Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 为什么LWP::Simple::get会减慢后续正则表达式的速度?_Regex_Perl_Lwp Useragent - Fatal编程技术网

Regex 为什么LWP::Simple::get会减慢后续正则表达式的速度?

Regex 为什么LWP::Simple::get会减慢后续正则表达式的速度?,regex,perl,lwp-useragent,Regex,Perl,Lwp Useragent,在字符串上使用perl正则表达式进行基准测试时 如果我使用shell调用获取字符串,那么效果会很好。 但是如果我使用LWP::Simple,那么随后的正则表达式就会变慢 对于lwp,正则表达式需要13秒,而wget的工作时间小于4秒 为什么? #!/usr/bin/perl

在字符串上使用perl正则表达式进行基准测试时

如果我使用shell调用获取字符串,那么效果会很好。 但是如果我使用LWP::Simple,那么随后的正则表达式就会变慢 对于lwp,正则表达式需要13秒,而wget的工作时间小于4秒

为什么?

#!/usr/bin/perl                                                                                                                                                                                      
use Time::HiRes qw( gettimeofday tv_interval );
use strict;
my %data;

$data{'TO'} = "rcpt";
$data{'MESSAGE_ID'} = "37";
$data{'ID'} = "7";
$data{'UNIQID'} = "cff47534-fe6b-c45a-7058-8301adf1b97";
$data{'XOR'} = "abcdef";

my $url = "http://raw.githubusercontent.com/ramprasadp/hostedtexfiles/master/msg2.txt";

#
# This makes the rest of the program very slow LWP::Simple
#
my $msg_string = LWP::Simple::get($url);                  


# While this works great                                                                                                                                                              
#my $msg_string = `wget -q -O - $url`;

my $start = [gettimeofday];
for (my $j=0;$j<50000; $j++) {
    my $tmp_string = $msg_string;
    $tmp_string =~ s/\$\{ (\w+) \}/$data{$1}/g;
}
print "Time taken in ms is " . 1000 * tv_interval ( $start )."\n";
#/usr/bin/perl
使用时间::租用qw(gettimeofday tv_interval);
严格使用;
我的%数据;
$data{'TO'}=“rcpt”;
$data{'MESSAGE_ID'}=“37”;
$data{'ID'}=“7”;
$data{'UNIQID'}=“cff47534-fe6b-c45a-7058-8301adf1b97”;
$data{'XOR'}=“abcdef”;
我的$url=”http://raw.githubusercontent.com/ramprasadp/hostedtexfiles/master/msg2.txt";
#
#这使得程序的其余部分非常慢LWP::Simple
#
我的$msg_string=LWP::Simple::get($url);
#虽然这很有效
#my$msg_string=`wget-q-O-$url`;
我的$start=[gettimeofday];

对于(my$j=0;$j速度很快,因为它是错误的。您在这里使用替换运算符
s//
来处理文本字符串。
get
生成一个文本字符串,所以没关系。
`wget…`
生成一个八位字节缓冲区。尽管如此,您的替换操作碰巧显示了正确的结果,但这是由于愚蠢的运气d巧合,在一般情况下不起作用。当具有高代码点的字符进场时,它可能会中断,并且您意外地在八位字节级别替换了其中的一部分

您可以使用将
get
文本字符串编码为八位字节,两个结果都是快速和错误的,或者将
`wget…`
八位字节解码为文本字符串,两个结果都是正确和缓慢的,从而验证我所说的是正确的


阅读本主题的介绍。

@Ram:请显示两种情况下的输出,否则没有任何响应。