perl 读和写文件
open(my $fh1, '<', $input_size1) or die "无法打开文件 '$input_size1' $!";
open my $output_fh1, ">", $out1 or die "无法打开文件:$!";
读入文件,每一行分割字段,并分配给不同变量:
sub read_qtl_data {
my $file = shift;
my %qtl_data;
open my $fh, '<', $file or die "无法打开文件 $file: $!";
while (<$fh>) {
chomp;
my ($chromosome, $start, $end) = split /\t/;
push @{$qtl_data{$chromosome}}, [$start, $end];
}
close $fh;
return %qtl_data;
}
open(my $fh1, '<', $input_size1) or die "无法打开文件 '$input_size1' $!";
my @QTL_sizes1;
while (my $line1 = <$fh1>) {
chomp($line1);
push @QTL_sizes1, $line1;
}
close($fh1);
将每行数据分割成数组,使用了 Perl 中的 split 函数。它将每行内容根据正则表达式 \s+ 进行分割,\s+ 表示一个或多个空白字符(空格、制表符等)。
my @data = split(/\s+/, $line);
scalar 是一个上下文操作符,用于获取列表或数组的大小或长度。当应用于数组时,它返回数组中元素的数量。
my $num_QTL1 = scalar @QTL_sizes1;
my $num_QTL2 = scalar @QTL_sizes2;
rand 是用于生成随机数的内置函数。它生成一个介于 0 到 1 之间的浮点数。如果想得到特定范围内的随机整数,可以使用 int 函数结合 rand。
my $start_position = int(rand($max_length - $QTL_size));
在文件中写入:
print $output_fh1 "Number of overlapping QTLs: $overlap_count\n";
打印数组中的内容:
foreach my $qtl (@QTL_positions) {
print $output_fh "QTL1 - Chromosome: $qtl->{chromosome}, Start: $qtl->{start}, End: $qtl->{end}, Size: $qtl->{size}\n";
}
# $qtl->{start} 这个语法是用于访问哈希引用中特定键的值。在 Perl 中,$qtl 是一个哈希引用,->{start} 表示从这个哈希引用中获取名为 start 的键对应的值。
网友评论