我有一个包含三列显示学生姓名、科目和成绩的grades.tsv 文件:
Liam Mathematics 5
Liam History 6
Liam Geography 8
Liam English 8
Aria Mathematics 8
Aria History 7
Aria Geography 6
Isabella Mathematics 9
Isabella History 4
Isabella Geography 7
Isabella English 5
Isabella Music 8
Run Code Online (Sandbox Code Playgroud)
我想计算每个学生的平均成绩并将其添加到单独的列中。为此,我使用了两个文件句柄 DATA 和 OUT 打开同一个文件:
use strict;
use warnings;
# Open file with grades for calculation of average grade for each student
open (DATA,"grades.tsv") or die "Cannot open file\n";
my %grade_sums;
my %num_of_subjects;
# Calculate sum of grades and number of subjects …Run Code Online (Sandbox Code Playgroud) 我想使用 start、end 和 step 对字符串进行切片。让我们假设开始坐标是 1,结束坐标是 22,步长是 3。切片字符串应该只选择坐标 1、4、7、10、13、16、19、22 中的元素。我写了一个函数 get_subseq这样做。在 Perl 中是否有更短的方法来做到这一点?
sub get_subseq {
my ( $seq, $start, $end, $step ) = @_;
my $index = $start;
while ( $index <= $end ) {
print substr $seq, $index, 1;
$index += $step;
}
}
my $sequence = 'AGGGTAGAGTGAGAAGCACCAGCAGGCAGTAACAGC';
# The result should be GTAGACCC
get_subseq( $sequence, 1, 22, 3 );
Run Code Online (Sandbox Code Playgroud)