これら 2 つのサブルーチンがどのように機能し、どのような値またはデータ構造が返されるのかを理解する助けが必要です。コードの最小限の表現を次に示します。
#!/usr/bin/perl
use strict; use warnings;
# an array of ASCII encrypted characters
my @quality = ("C~#p)eOA`/>*", "DCCec)ds~~", "*^&*"); # for instance
# input the quality
# the '@' character in front deferences the subroutine's returned array ref
my @q = @{unpack_qual_to_phred(@quality)};
print pack_phred_to_qual(\@q) . "\n";
sub unpack_qual_to_phred{
my ($qual)=@_;
my $upack_code='c' . length($qual);
my @q=unpack("$upack_code",$qual);
for(my $i=0;$i<@q;$i++){
$q[$i]-=64;
}
return(\@q);
}
sub pack_phred_to_qual{
my ($q_ref)=@_;
@q=@{$q_ref};
for(my $i=0;$i<@q;$i++){
$q[$i]+=64;
}
my $pack_code='c' . int(@q);
my $qual=pack("$pack_code",@q);
return ($qual);
}
1;
私の理解では、このunpack_qual_to_phread()
サブルーチンは に格納されている ASCII 文字要素を解読しているよう@quality
です。サブルーチンは、ASCII 文字の要素を含む配列を読み込みます。配列の各要素が処理され、明らかに復号化されます。次に、サブルーチンは、復号化された配列の要素を含む配列 ref を返します。これはよくわかりますが、Perl の関数pack
とunpack
. また、それらの良い例をオンラインで見つけることができませんでした。
pack_phred_to_qual
サブルーチンは、品質配列 ref を ASCII 文字に変換して出力すると思います。
ありがとう。どんな助けや提案も大歓迎です。また、誰かが Perlpack
とunpack
関数がどのように機能するかの簡単な例を提供できれば、それも役に立ちます。