我发现至少有3种方法可以从perl中的非阻塞套接字中读取
$socket->recv
$socket->sysread
POSIX::read($socket,...
Run Code Online (Sandbox Code Playgroud)
看起来像3个不同的名字到同一个东西,我读了文件,但我找不到一个巨大的不同.任何人?
我正在尝试处理一个非常大的文件,并计算文件中某个长度的所有序列的频率.
为了说明我在做什么,请考虑一个包含序列的小输入文件 abcdefabcgbacbdebdbbcaebfebfebfeb
下面,代码读取整个文件,并获取长度为n的第一个子字符串(低于我将其设置为5,尽管我希望能够更改它)并计算其频率:
abcde => 1
Run Code Online (Sandbox Code Playgroud)
下一行,它向右移动一个字符,并执行相同的操作:
bcdef => 1
Run Code Online (Sandbox Code Playgroud)
然后它继续执行其余的字符串并打印5个最常见的序列:
open my $in, '<', 'in.txt' or die $!; # 'abcdefabcgbacbdebdbbcaebfebfebfeb'
my $seq = <$in>; # read whole file into string
my $len = length($seq);
my $seq_length = 5; # set k-mer length
my %data;
for (my $i = 0; $i <= $len - $seq_length; $i++) {
my $kmer = substr($seq, $i, $seq_length);
$data{$kmer}++;
}
# print the hash, showing only the 5 most frequent k-mers
my $count = …
Run Code Online (Sandbox Code Playgroud)