配列は複数の値を保存できる。保存される複数の値は 0、1、2、・・・のように添え字が付けらる。変数の名前とともに添え字を与えることで、その添字に対応する値を取得したり、保存したりすることができる。
配列の宣言と初期化
配列は、変数名の前に @
を付ける。配列に複数の値を代入するとき、各々の値をカンマで区切り、それらを括弧で囲む。
my @primer = ('AGTCCGTGCGGCAA', 'GTATTTACATCCCA', 'CAGTGCTATGTCCA');
my @miRNA = (
'CGAGGGGGUGCAGGACUUGACGGCUGCAACUGUGCGGCCGGCCACACCGUCAGUGCAGCGU',
'CAGAUAAAUAGAAUACUAAGUAAAAAAUCAGUAUGGAGGUUUAGUUUGG',
'AAGGAGCACUCACUCCAAUUUCCCUGGACUGGGGGCAGGCUGCAGGAUGUUCCAG'
);
要素の取り出し for foreach
配列に保存されているすべての要素を順に取り出すとき、for
文または foreach
文を利用する。
for
my @arr = ("A", "C", "D", "B");
for (my $i = 0; $i < @arr; $i++) {
print $arr[$i] . "\n";
}
## A
## C
## D
## B
foreach
foreach my $ele (@arr) {
print $ele . "\n";
}
## A
## C
## D
## B
sort
関数を利用することで、配列の要素を並べ替えて出力することができる。また、reverse
関数を利用することで、配列を逆順に出力することができる。
my @arr = ("A", "C", "D", "B");
foreach my $ele (sort @arr) {
print $ele . "\n";
}
## A
## B
## C
## D
foreach my $ele (reverse @arr) {
print $ele . "\n";
}
## D
## C
## B
## A
配列要素の削除
Perl では、配列の先頭の要素を削除するには shift
関数を利用し、最後の要素を削除するには pop
を利用する。また、配列の途中にある要素を削除するには splice
を利用する。
my @arr = ("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K");
my $a = shift(@arr);
print $a;
## A
print @arr;
## BCDEFGHIJK
my $b = pop(@arr);
print $b;
## K
print @arr;
## BCDEFGHIJ
my $c = splice(@arr, 2, 3);
print $c
##
print @arr;
## BCGHIJ
配列要素の追加
Perl では、配列の先頭要素の前に追加するには unshift
関数を利用し、最後要素の後ろに追加するには push
を利用する。
my @arr = ("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K");
unshift(@arr, "0");
print @arr;
## 0ABCDEFGHIJK
poush(@arr, "Z");
print @arr;
## 0ABCDEFGHIJKZ
配列の途中で要素を追加するには splice
を利用する。splice
関数は 4 つの引数を受け取る。1 番目の引数は操作対象の配列を代入する。2 番目の引数は操作開始位置を指定する。3 番目の引数は操作開始位置から何文字を削除するのかを指定する、削除しない場合は 0 を指定する。4 番目の引数は、操作開始位置に挿入する配列を指定する。
my @arr = ("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K");
splice(@arr, 2, 0, ("a", "b", "c"));
print @arr;
## ABabcCDEFGHIJK
文字列を配列に分割
文字列をある区切り文字に従って部分文字列に分割し、各々を一つの配列に収めることができる。この際、文字列の分割は split
関数を利用する。split
関数の 1 つ目の引数には区切り文字のパターンを、2 つ目の引数には分割対象文字列を代入する。
my $csv = "NM200102.1,NM200110.2,NM200121.1,NM200123.2";
my @accession = split(/,/, $csv);
for (my $i = 0; $i < @accession; $i++) {
print $accession[$i] . "\n";
}
## NM200102.1
## NM200110.2
## NM200121.1
## NM200123.2
配列を文字列に変更
配列の要素をすべて連結して、一つの文字列にすることができる。配列の要素の連結は join
関数を利用する。文字列を連結するときに利用する区切り文字を指定することができる。
my @data = (21, 31, 11, 12, 14, 11);
my $csv = join(',', @data);
print $csv . "\n";
## 21,31,11,12,14,11
配列中のあるパターンにマッチした要素だけを出力する方法
配列に保存されている値のうち、あるパターンにマッチした値だけを出力することができる。grep
関数を利用してパターンマッチ行う。例えば、複数の要素を含む配列から、文字列 ATG を含む要素だけ取り出す場合は、次のようにする。
my @seq = ("AAGTCGATTCAGG", "GTAGTATGCATGTCA", "AGTGCTAGCTTTT", "ACAGTATGCATGC");
my @atg = grep(/ATG/, @seq);
foreach my $ele (@atg) {
print "$ele\n";
}
foreach my $ele (grep(/ATG/, @atg)) {
print "$ele\n";
}