以下是我一直致力于提高速度的代码片段。
use strict;
use warnings;
use Encode;
open(IN,"<utf8",$ARGV[0]) or die "Cannot open $ARGV[0]:$!\n"; ##treat it as a huge data of 35,000 lines in devnagari script.
my @in = <IN>;
close(IN);
my $key = "अच्छा"; #key to be matched contains devanagari script as a string
foreach my $in(@in) {
chomp($in);
$key = decode_utf8($key);
$in = decode_utf8($in);
if($key eq $in) {
print "$key: matched\n";
}
else {
print "Not matched\n";
}
}
我正在尝试使用密钥匹配文件中的行。 通过分析我的代码,我得到了结果。
结果是decode_utf8
消耗了34%的时间。
由于我的数据是在utf8中,我使用了decode_utf8
。
我可以做些什么来提高速度。替换代码中的decode_utf8
以匹配unicode数据的任何其他解决方法。
答案 0 :(得分:1)
结果是decode_utf8消耗了34%的时间。
好吧,这基本上就是你所有的程序。
更重要的是,您的代码有问题。你正在解码以前解码的字符串!
:utf8
)解码文件的内容,然后解码循环中已解码的内容。$key
的内容,以便在第四次传递时使用decode_utf8(decode_utf8(decode_utf8(decode_utf8($key))))
。修正:
use utf8; # Source code encoded using UTF-8.
use open ':std', ':encoding(UTF-8)'; # Term provides and expects UTF-8. Default for files.
use strict;
use warnings;
my $key = "अच्छा";
my $found = 0;
while (my $line = <>) {
chomp($line);
if ($line eq $key) {
$found = 1;
last;
}
}
if ($found) {
print "Match found\n";
else {
print "No match\n";
}
这也解决了其他问题:
use open ':std'
)。open my $IN
代替open IN
。)Not matched
34,999次。:utf8
支持:encoding(UTF-8)
。<>
。die
。 (在or die
之前设置换行符。)