Óé¬å Üw, - knob.osdn.jpknob.osdn.jp/cbrc/lecture/text/bit2_text2.pdf · print("hello,...

14
Perlプログラミング入門 1 #!/usr/bin/perl -w use strict; print("Hello, Bioinformatics!\n"); $ perl hello.pl hello.pl ファイル名 ソースコード 実行方法 資料の見方 2 プログラムの基本 3 #!/usr/bin/perl -w use strict; print("Hello, Bioinformatics!\n"); $ perl hello.pl hello.pl 4 #!/usr/bin/perl -w use strict; print("Hello, Bioinformatics!\n”); $ perl hello.pl hello.pl Perlの場所 Perlの動作 処理 プログラムの構造は3つに分かれる 5 #!/usr/bin/perl -w use strict; print("Hello, Bioinformatics!\n”); $ perl hello.pl hello.pl Perlの場所 Perlの動作 処理 実行はシェルから行う 6

Upload: doanbao

Post on 18-Sep-2018

215 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Óé¬å Üw, - knob.osdn.jpknob.osdn.jp/cbrc/lecture/text/BIT2_text2.pdf · print("Hello, Bioinformatics!\n"); $ perl hello.pl hello.pl Ñ ç Ê ¹ µ¯ Å îæ M O ¿ w_ M 2 Óé¬å

Perlプログラミング入門

1

#!/usr/bin/perl -w

use strict;

print("Hello, Bioinformatics!\n");

$ perl hello.pl

hello.pl ファイル名

ソースコード

実行方法

資料の見方

2

プログラムの基本

3

#!/usr/bin/perl -w

use strict;

print("Hello, Bioinformatics!\n");

$ perl hello.pl

hello.pl

4

#!/usr/bin/perl -w

use strict;

print("Hello, Bioinformatics!\n”);

$ perl hello.pl

hello.pl

Perlの場所

Perlの動作

処理

プログラムの構造は3つに分かれる

5

#!/usr/bin/perl -w

use strict;

print("Hello, Bioinformatics!\n”);

$ perl hello.pl

hello.pl

Perlの場所

Perlの動作

処理

実行はシェルから行う

6

Page 2: Óé¬å Üw, - knob.osdn.jpknob.osdn.jp/cbrc/lecture/text/BIT2_text2.pdf · print("Hello, Bioinformatics!\n"); $ perl hello.pl hello.pl Ñ ç Ê ¹ µ¯ Å îæ M O ¿ w_ M 2 Óé¬å

#!/usr/bin/perl

use strict;

print("Hello, Bioinformatics!\n”);

$ perl hello.pl

hello.pl

Perlの場所

Perlの動作

処理

文の末尾はセミコロン

文の終りを示す

7

#!/usr/bin/perl

use strict;

print("Hello, Bioinformatics!\n");

$ perl hello.pl

hello.pl

関数 ダブルクオート文字列

関数と文字列

8

引数

戻り値

print()

"Hello, Bioinformatics!\n”;

Hello, Bioinformatics!

関数

関数とは

9

ダブルクォート文字列

“29”“ATG”“¥n”

10

¥n 改行文字

¥r 復帰文字

¥t タブ文字

¥” ダブルクォート

ダブルクォート文字列で使えるバックスラッシュエスケープ

11

#!/usr/bin/perl -w

use strict;

my $name = ‘Itoshi’;

print("Hello, $name!\n");

$ perl hello.pl Itoshi

hello2.pl

12

Page 3: Óé¬å Üw, - knob.osdn.jpknob.osdn.jp/cbrc/lecture/text/BIT2_text2.pdf · print("Hello, Bioinformatics!\n"); $ perl hello.pl hello.pl Ñ ç Ê ¹ µ¯ Å îæ M O ¿ w_ M 2 Óé¬å

シングルクォート文字

‘29’‘ATG’‘¥n’

13

スカラー変数

my $box my $box = ‘boy’

14

#!/usr/bin/perl -w

use strict;

my $name = ‘Itoshi’;

print("Hello, $name!\n");

$ perl hello.pl Itoshi

hello2.pl

15

#!/usr/bin/perl -w

use strict;

my $name = ‘Itoshi’;

print("Hello, $name!\n");

$ perl hello.pl Itoshi

hello2.pl

スカラー変数

代入

シングルクォート文字列

スカラー変数へ代入する

16

#!/usr/bin/perl -w

use strict;

my $name = ‘Itoshi’;

print("Hello, $name!\n");

$ perl hello.pl Itoshi

hello2.pl

変数展開

17

まとめ1. プログラムの構造は3つに分かれる

2. プログラムの実行方法

3. 関数

4. スカラー変数

5. ダブル/シングルクォート文字列

1. バックスラッシュエスケープ

2. 変数展開

18

Page 4: Óé¬å Üw, - knob.osdn.jpknob.osdn.jp/cbrc/lecture/text/BIT2_text2.pdf · print("Hello, Bioinformatics!\n"); $ perl hello.pl hello.pl Ñ ç Ê ¹ µ¯ Å îæ M O ¿ w_ M 2 Óé¬å

#!/usr/bin/perl -w

use strict;

my $height = 1.63;

my $weight = 58;

my $bmi = $weight / ($height * $height);

print “$bmi¥n”;

$ perl bmi.pl

bmi.pl

19

#!/usr/bin/perl -w

use strict;

my $height = 1.63;

my $weight = 58;

my $bmi = $weight / ($height * $height);

print “$bmi¥n”;

$ perl bmi.pl

bmi.pl

四則演算

20

$a + $b 加算$a - $b 減算$a * $b 乗算$a / $b 除算$a % $b 剰余$a++ インクリメント$a-- デクリメント

$a**$b $aの$b乗

算術演算子

21

my $height = 1.63;

my $weight = 58;

my $bmi = $weight / ($height * $height);

my $fat_index;

if ($bmi >= 25) {

$fat_index = 1;

} else {

$fat_index = 0;

}

print “Your BMI: $bmi¥n”;

print “Your Fat index: $fat_index¥n”;

$ perl fat_index.pl

fat_index.pl

22

if文if

else

23

my $height = 1.63;

my $weight = 58;

my $bmi = $weight / $length * $length

my $fat_index;

if ($bmi >= 25) {

$fat_index = 1;

} else {

$fat_index = 0;

}

print “Your BMI: $bmi¥n”;

print “Your Fat index: $fat_index¥n”;

$ perl fat_index.pl

fat_index.pl

24

Page 5: Óé¬å Üw, - knob.osdn.jpknob.osdn.jp/cbrc/lecture/text/BIT2_text2.pdf · print("Hello, Bioinformatics!\n"); $ perl hello.pl hello.pl Ñ ç Ê ¹ µ¯ Å îæ M O ¿ w_ M 2 Óé¬å

if ($bmi >= 25 and $bmi < 30) {

$fat_index = 1;

} elsif ($bmi >= 30 and $bmi < 35){

$fat_index = 2;

} elsif ($bmi >= 35 and $bmi < 40) {

$fat_index = 3;

} elsif ($bmi >= 40) {

$fat_index = 4;

} else {

$fat_index = 0;

}

$ perl fat_index2.pl

fat_index2.pl

25

elsifの使いすぎには注意!

26

$a == $b 数値が等しい$a eq $b 文字列が等しい$a != $b 数値が等しくない$a ne $b 文字列が等しくない$a < $b $aが$より小さい

$a <= $b $aが$b以下$a > $b $aが$bより大きい

$a >= $b $aが$b以上$a and $b (&&) $aでかつ$b

$a or $b (||) $aか$b

$a not $b $aだが$bでない

演算子

27

まとめ2

• 数値の演算

• 演算子

• if文

28

プログラムへの入出力繰り返し処理

29

DNA9 gagcctaaggtttagggaggtcgtggtactttacgtaaggagtcagaaacgggcctcggt

DNA6 ctaaggtgggtgtgtagtggtacgtggtactaaggtgggtgtgtagtggtactaaggtgt

DNA3 atgcctgaggggcctcggtgtttagggtcctgggagcctaacggtcgtggtactttaccc

DNA4 ctcggtgtttagggaggagcctaaggtaaggtcgtggtactttacgcagtcagaaacggg

DNA8 gtcgtggtactttacaaggtatcggtgtttagggaggagcctaggagtcagaaacgggcc

DNA1 ctttgtgggctcctgcaagtgccaggcgctgaaggagcctaaggtaaggagtcagaaacg

DNA2 gcgtagagtcccttggtggaaggtgggtgtgtaggcagcagaggttaacagaaatctcag

DNA7 gttagggaggagcggggtactttacgcctcggtgttctaaggtaaggagtcagaaacgtc

DNA5 gggtgtgtataatggagtcgtggtacttcagaggttaacagaaatctcaggtccctaggt

$ cat genelist.txt

genelist.txt

30

Page 6: Óé¬å Üw, - knob.osdn.jpknob.osdn.jp/cbrc/lecture/text/BIT2_text2.pdf · print("Hello, Bioinformatics!\n"); $ perl hello.pl hello.pl Ñ ç Ê ¹ µ¯ Å îæ M O ¿ w_ M 2 Óé¬å

#!/usr/bin/perl

use strict;

while(my $line = <>) {

chomp($line);

print "$line\n";

}

$ perl cat.pl genelist.txt

cat.pl

31

#!/usr/bin/perl

use strict;

while(my $line = <>) {

chomp($line);

print "$line\n";

}

$ perl cat.pl genelist.txt

cat.pl

while文 真か疑かを調べる

真ならここを実行し次の真偽を評価する

whileを使った繰り返し

32

#!/usr/bin/perl

use strict;

while(my $line = <>) {

chomp($line);

print "$line\n";

}

$ perl cat.pl genelist.txt

cat.pl

ダイヤモンド演算子

<>を使った入力

33

ダイヤモンド演算子 = 1行と取り出す1行取り出して$lineに渡すwhileの中身を実行

1行取り出して$lineに渡すwhileの中身を実行

1行取り出して$lineに渡すwhileの中身を実行

取り出せないのでundef (偽)

を返すwhileを抜ける

水が出る猫が飲む

水が出る猫が飲む

水が出る猫が飲む

水が出ないので蛇口から抜ける

34

#!/usr/bin/perl

use strict;

while(my $line = <>) {

chomp($line);

print "$line\n";

}

$ perl cat.pl genelist.txt

cat.pl

文字列の最後の改行文字を除く

入力から改行を除く

35

my ($file) = @ARGV;

open(FILE, $file);

while(my $line = <FILE>) {

chomp($line);

print "$line\n";

}

$ perl cat2.pl genelist.txt

cat2.pl

36

Page 7: Óé¬å Üw, - knob.osdn.jpknob.osdn.jp/cbrc/lecture/text/BIT2_text2.pdf · print("Hello, Bioinformatics!\n"); $ perl hello.pl hello.pl Ñ ç Ê ¹ µ¯ Å îæ M O ¿ w_ M 2 Óé¬å

my ($file) = @ARGV;

open(FILE, $file);

while(my $line = <FILE>) {

chomp($line);

print "$line\n";

}

$ perl cat2.pl genelist.txt

cat2.pl配列 (アレイ)

データを複数格納できる配列

37

スカラーと配列

箱がひとつ$box

箱が複数@box

38

配列変数my @box = (‘boy’, ‘’)

$box[0]

$box[1]

my ($first_box, $second_box) = @box$first_box: ‘boy’$second_box: ‘’

39

my ($file) = @ARGV;

open(FILE, $file);

while(my $line = <FILE>) {

chomp($line);

print "$line\n";

}

$ perl cat2.pl genelist.txt

cat2.pl引数を格納した配列変数

引数

特殊変数@ARGVは引数を格納

40

my ($file) = @ARGV;

open(FILE, $file);

while(my $line = <FILE>) {

chomp($line);

print "$line\n";

}

$ perl cat2.pl genelist.txt

cat2.pl open = ファイルを開く関数

開くファイルを指定

41

my ($file) = @ARGV;

open(FILE, $file);

while(my $line = <FILE>) {

chomp($line);

print "$line\n";

}

$ perl cat2.pl genelist.txt

cat2.pl

ファイルハンドル<>演算子で1行ずつ取りだす

ファイルをファイルハンドルに結びつける

42

Page 8: Óé¬å Üw, - knob.osdn.jpknob.osdn.jp/cbrc/lecture/text/BIT2_text2.pdf · print("Hello, Bioinformatics!\n"); $ perl hello.pl hello.pl Ñ ç Ê ¹ µ¯ Å îæ M O ¿ w_ M 2 Óé¬å

Perlプログラム ファイル命名ファイルハンドル

親 子命名名前

43

まとめ3

• while: 偽になるまでくりかえす

• <>による入力

• スカラーと配列

• @ARGV

• open関数とファイルハンドル

44

my ($file) = @ARGV;

open(FILE, $file);

my @lines;

while(my $line = <FILE>) {

chomp($line);

push(@lines, $line);

}

print "$lines[1]\n";

$ perl pickaline.pl genelist.txt

pickaline.pl

45

my ($file) = @ARGV;

open(FILE, $file);

my @lines;

while(my $line = <FILE>) {

chomp($line);

push(@lines, $line);

}

print "$lines[1]\n";

$ perl pickaline.pl genelist.txt

pickaline.pl

配列変数を用意

配列に入れる

配列から取り出す

配列の作成と要素の取り出し

46

push関数

my @box = (‘boy’, ‘’)

$box[0]

$box[1]

push(@box, ‘boy’)

47

my ($file, $index) = @ARGV;

open(FILE, $file);

my @lines;

while(my $line = <FILE>) {

chomp($line);

push(@lines, $line);

}

print "$lines[$index]\n";

pickaline2.pl

$ perl pickaline2.pl genelist.txt 1

48

Page 9: Óé¬å Üw, - knob.osdn.jpknob.osdn.jp/cbrc/lecture/text/BIT2_text2.pdf · print("Hello, Bioinformatics!\n"); $ perl hello.pl hello.pl Ñ ç Ê ¹ µ¯ Å îæ M O ¿ w_ M 2 Óé¬å

my ($file, $index) = @ARGV;

open(FILE, $file);

my @lines;

while(my $line = <FILE>) {

chomp($line);

push(@lines, $line);

}

print "$lines[$index]\n";

$ perl pickaline2.pl genelist.txt 1

pickaline2.pl 引数を配列で受けとる

49

my ($file, $index) = @ARGV;

open(FILE, $file);

my @lines;

while(my $line = <FILE>) {

chomp($line);

push(@lines, $line);

}

print "$lines[$index]\n";

pickaline2.pl

$ perl pickaline2.pl genelist.txt 1

$lines[1]

引数を配列の添字にする

50

まとめ4

• 配列の添字による取り出し

• 引数から添字を得る

• push関数

• 添字に変数が使える

51

my ($file, $name) = @ARGV;

open(FILE, $file);

my %lines;

while(my $line = <FILE>) {

chomp($line);

my ($genename, $sequence) =

split(/ /, $line);

$lines{$genename} = $sequence;

}

print "$name $lines{$name}\n";

pickaline3.pl

$ perl pickaline3.pl genelist.txt DNA1

52

my ($file, $name) = @ARGV;

open(FILE, $file);

my %lines;

while(my $line = <FILE>) {

chomp($line);

my ($genename, $sequence) =

split(/ /, $line);

$lines{$genename} = $sequence;

}

print "$name $lines{$name}\n";

pickaline3.pl

$ perl pickaline3.pl genelist.txt DNA1

文字列を分割する関数

53

DNA9 gagcctaaggtttagggaggtcgtggtactttacgtaaggagtcagaaacgggcctcggt

DNA6 ctaaggtgggtgtgtagtggtacgtggtactaaggtgggtgtgtagtggtactaaggtgt

DNA3 atgcctgaggggcctcggtgtttagggtcctgggagcctaacggtcgtggtactttaccc

DNA4 ctcggtgtttagggaggagcctaaggtaaggtcgtggtactttacgcagtcagaaacggg

DNA8 gtcgtggtactttacaaggtatcggtgtttagggaggagcctaggagtcagaaacgggcc

DNA1 ctttgtgggctcctgcaagtgccaggcgctgaaggagcctaaggtaaggagtcagaaacg

DNA2 gcgtagagtcccttggtggaaggtgggtgtgtaggcagcagaggttaacagaaatctcag

DNA7 gttagggaggagcggggtactttacgcctcggtgttctaaggtaaggagtcagaaacgtc

DNA5 gggtgtgtataatggagtcgtggtacttcagaggttaacagaaatctcaggtccctaggt

genelist.txt

my ($genename, $sequence) =

split(/ /, $line);

split関数

切るパターン 切るもの

54

Page 10: Óé¬å Üw, - knob.osdn.jpknob.osdn.jp/cbrc/lecture/text/BIT2_text2.pdf · print("Hello, Bioinformatics!\n"); $ perl hello.pl hello.pl Ñ ç Ê ¹ µ¯ Å îæ M O ¿ w_ M 2 Óé¬å

DNA9 gagcctaaggtttagggaggtcgtggtactttacgtaaggagtcagaaacgggcctcggt

DNA6 ctaaggtgggtgtgtagtggtacgtggtactaaggtgggtgtgtagtggtactaaggtgt

DNA3 atgcctgaggggcctcggtgtttagggtcctgggagcctaacggtcgtggtactttaccc

DNA4 ctcggtgtttagggaggagcctaaggtaaggtcgtggtactttacgcagtcagaaacggg

DNA8 gtcgtggtactttacaaggtatcggtgtttagggaggagcctaggagtcagaaacgggcc

DNA1 ctttgtgggctcctgcaagtgccaggcgctgaaggagcctaaggtaaggagtcagaaacg

DNA2 gcgtagagtcccttggtggaaggtgggtgtgtaggcagcagaggttaacagaaatctcag

DNA7 gttagggaggagcggggtactttacgcctcggtgttctaaggtaaggagtcagaaacgtc

DNA5 gggtgtgtataatggagtcgtggtacttcagaggttaacagaaatctcaggtccctaggt

genelist.txt

my ($genename, $sequence) =

split(/ /, $line);

55

パターンマッチ

/PATTERN/

56

文字列を操作する関数split(/P/, $s)

パターンPで文字列$sをアレイに分割する

index($s, $subs)文字列$sの中で,文字列$subsが表れる位置

を返すsubstr($s, $subs, 5)

文字列$sの中で,文字列$subsが表れる位置から5文字取り出す

chomp($s)文字列$sの末尾にある連続した改行文字を

削除するchop($s) 文字列$sの末尾にある文字を削除する

57

my ($file, $name) = @ARGV;

open(FILE, $file);

my %lines;

while(my $line = <FILE>) {

chomp($line);

my ($genename, $sequence) =

split(/ /, $line);

$lines{$genename} = $sequence;

}

print "$name $lines{$name}\n";

pickaline3.pl

$ perl pickaline3.pl genelist.txt DNA1

ハッシュ変数を用意

ハッシュ変数に代入

ハッシュ変数からとりだす

ハッシュの作成とデータアクセス

58

ハッシュ(連想配列)変数

my $white = $colors{‘leftbottom’}

my %colors = (‘leftbottom’ => ‘white’,

‘righttop’ => ‘orange’)

59

my ($file, $name) = @ARGV;

open(FILE, $file);

my %lines;

while(my $line = <FILE>) {

chomp($line);

my ($genename, $sequence) =

split(/ /, $line);

$lines{$genename} = $sequence;

}

print "$name $lines{$name}\n";

pickaline3.pl

$ perl pickaline3.pl genelist.txt DNA1

引数でハッシュにアクセスする

60

Page 11: Óé¬å Üw, - knob.osdn.jpknob.osdn.jp/cbrc/lecture/text/BIT2_text2.pdf · print("Hello, Bioinformatics!\n"); $ perl hello.pl hello.pl Ñ ç Ê ¹ µ¯ Å îæ M O ¿ w_ M 2 Óé¬å

まとめ5

• 文字列を操作する関数

• パターンマッチ

• ハッシュ変数

61

while(my $line = <>) {

chomp($line);

if ($line =~ /tataa/) {

print "$line 1\n";

} else {

print “$line 0¥n”;

}

}

patternmatch.pl

$ perl patternmatch.pl genelist.txt

62

while(my $line = <>) {

chomp($line);

if ($line =~ /tataa/) {

print "$line 1\n";

} else {

print “$line 0¥n”;

}

}

patternmatch.pl

$ perl patternmatch.pl genelist.txt

ifで処理を分岐させる

63

while(my $line = <>) {

chomp($line);

my ($genename, $sequence) =

split(/ /, $line);

if ($sequence =~ /^atg/) {

print "$line 1\n";

} else {

print "$line 0\n";

}

}

patternmatch2.pl

$ perl patternmatch2.pl genelist.txt

64

while(my $line = <>) {

chomp($line);

my ($genename, $sequence) =

split(/ /, $line);

if ($sequence =~ /^atg/) {

print "$line 1\n";

} else {

print "$line 0\n";

}

}

patternmatch2.pl

$ perl patternmatch2.pl genelist.txt

正規表現を使ったパターンマッチ

65

a a

abc abc

a* aが0個以上a+ aが1個以上a+? なるべく少ないa

^ 行頭$ 行末. 1文字

[abc] abcのどれか[abcABC] abcABCのどれか

[0-9] 0から9のどれか[0-9¥-] 0から9, - のどれか[^0-4] 0から4以外の数字

¥d [0-9]

¥w [a-zA-Z0-9_]

¥s [ ¥r¥t¥n¥f]

¥D [^0-9]

¥W [^a-zA-Z0-9_]

¥S [^ ¥r¥t¥n¥f]

正規表現

66

Page 12: Óé¬å Üw, - knob.osdn.jpknob.osdn.jp/cbrc/lecture/text/BIT2_text2.pdf · print("Hello, Bioinformatics!\n"); $ perl hello.pl hello.pl Ñ ç Ê ¹ µ¯ Å îæ M O ¿ w_ M 2 Óé¬å

while( my $line = <> ) {

chomp($line);

my($name, $sequence) =

split(/ /, $line);

$name =~ s/DNA/RNA/;

$sequence =~ s/t/u/g;

print "$name\t$sequence\n";

}

dna2rna.pl

$ dna2rna.pl genelist.txt67

while( my $line = <> ) {

chomp($line);

my($name, $sequence) =

split(/ /, $line);

$name =~ s/DNA/RNA/;

$sequence =~ s/t/u/g;

print "$name\t$sequence\n";

}

dna2rna.pl

$ dna2rna.pl genelist.txt

文字列の置換

68

while( my $line = <> ) {

chomp($line);

my($name, $sequence) =

split(/ /, $line);

$name =~ s/DNA/RNA/;

$sequence =~ s/t/u/g;

print "$name\t$sequence\n";

}

dna2rna.pl

$ dna2rna.pl genelist.txt

マッチするすべての文字列を置換

69

まとめ6

• パターンマッチと正規表現

• 置換

70

my %seqs;

while(my $line = <>){

chomp($line);

my ($name, $sequence) =

split(/ /, $line);

$seqs{$name} = $sequence;

}

my @names = keys(%seqs);

@names = sort(@names);

foreach my $name (@names){

print "$name\t$seqs{$name}\n";

}

sort.pl

$ sort.pl genelist.txt71

my %seqs;

while(my $line = <>){

chomp($line);

my ($name, $sequence) =

split(/ /, $line);

$seqs{$name} = $sequence;

}

my @names = keys(%seqs);

@names = sort(@names);

foreach my $name (@names){

print "$name\t$seqs{$name}\n";

}

sort.pl

$ sort.pl genelist.txt

配列とハッシュを操作する関数

72

Page 13: Óé¬å Üw, - knob.osdn.jpknob.osdn.jp/cbrc/lecture/text/BIT2_text2.pdf · print("Hello, Bioinformatics!\n"); $ perl hello.pl hello.pl Ñ ç Ê ¹ µ¯ Å îæ M O ¿ w_ M 2 Óé¬å

sort(@a) ソートした配列を返すreverse(@a) 逆順にした配列を返す

join(“¥t”, @a) 配列を¥tで結合したスカラーとして返すshift(@a) 最初の要素を返す/最初の要素はなくなる

unshift(@a, ‘a’) 配列の先頭にaを加えるpop(@a) 最後の要素を返す/最後の要素はなくなる

push(@a, ‘a’) 配列の最後にaを加える

配列を操作する関数

73

values(%a) valueの配列を返す

keys(%a) keyの配列を返す

each(%a) keyとvalueのペアを返す

ハッシュを操作する関数

74

my %seqs;

while(my $line = <>){

chomp($line);

my ($name, $sequence) =

split(/ /, $line);

$seqs{$name} = $sequence;

}

my @names = keys(%seqs);

@names = sort(@names);

foreach my $name (@names){

print "$name\t$seqs{$name}\n";

}

sort.pl

$ sort.pl genelist.txt

foreachを使った繰り返し

75

foreach

要素をひとつ取り出して$nameに渡すforeachの中身を実行

要素をひとつ取り出して$nameに渡すforeachの中身を実行

要素をひとつ取り出して$nameに渡すforeachの中身を実行

取り出せないのでforeachを抜ける

水が出る猫が飲む

水が出る猫が飲む

水が出る猫が飲む

水が出ないので蛇口から抜ける

76

まとめ7

• 配列やハッシュを操作する関数

• foreach

77

学んだこと• 文字列と数値

• データ構造 (スカラー,配列,ハッシュ)

• 入出力 (<>, open)

• 関数 (文字列,配列,ハッシュ)

• 分岐処理 (if)

• 繰り返し処理 (while, foreach)

• 正規表現とパターンマッチング

• 置換 (s//)

78

Page 14: Óé¬å Üw, - knob.osdn.jpknob.osdn.jp/cbrc/lecture/text/BIT2_text2.pdf · print("Hello, Bioinformatics!\n"); $ perl hello.pl hello.pl Ñ ç Ê ¹ µ¯ Å îæ M O ¿ w_ M 2 Óé¬å

さらに学ぶべきこと• 外部のプログラムを実行する

• ディレクトリ,ファイル操作

• 関数を自分で作る

• モジュールを利用する

• オブジェクト指向プログラミング

• ほかの言語

79

おすすめの書籍• 初級者向け

• 初めてのPerl 第3版 (オライリー)

• 新版Perl言語プログラミングレッスン入門編 (ソフトバンククリエイティブ)

• 中級者向け

• Effective Perl (アスキー)

• Perlクックブック (オライリー)

80