戻る

9.Perl の基礎

9-1.文字列操作

■ 文字列比較

Perl では、文字列用の比較演算子が用意されており、文字列を直接比較できます。
(C言語では、strcmp 関数などを使用した。)
if($a eq $b)    # $a と $b が等しいなら
if($a ne $b)    # $a と $b が等しくないなら
if($a gt $b)    # $a が $b より大きいなら
if($a ge $b)    # $a が $b 以上なら
if($a lt $b)    # $a が $b より小さいなら
if($a le $b)    # $a が $b 以下なら
if($a =~ $b)    # $a が $b を含んでいるなら
if($a =~ /正規表現/)    # $a が 正規表現で示されている文字列のパターンを含んでいるなら

■ 文字列操作関数

Perlでは文字列を配列変数ではなく、通常の変数に代入することは既に示した通りです。 perlでは文字列を操作するための様々な関数が用意されているので、いくつか紹介しておきます。 各関数の詳細な使用方法に関しては、他の解説サイトを参照してください。
split文字列を指定文字で分割
@b = split(/\t/, $a);
文字列 $aをタブで分割し、分割した各要素を@b配列変数に代入。
substr文字列の指定個所から指定長の文字列を抽出
$b = substr($a, 2, 5);
文字列 $a の3文字目から(最初の文字は0文字目)、5文字抽出し、$b に代入。$a の内容が "abcdefghijklmn" なら、$b は"cdefg"。
length文字列の長さを収得
$b = length($a);
文字列 $a の長さを $b に代入。$a の内容が "cdefg" なら $b は 5。
index文字列の中で、ある文字列が現れる最初の位置を検索
$b = index($a, "cde");
文字列 $a に含まれる "cde" の最初の位置を $b に代入。$a の内容が "abcdefghijklmn" なら $b は 2。検索して見つからなければ -1 を返す。
chomp文字列の最後にある改行を削除
chomp $a;

split関数の使用例)
$a = "We love Protein!";

@b = split(/\s/, $a);
print "@b\n";


■ ハッシュ変数

配列は、箱の名前が 0 から始まる番号であり Perl が自動的に生成するのに対して、 ハッシュでは箱の名前(key)を自分でつけます。配列が @ から始まるのに対して、 ハッシュは、% から始まります。
%list = ('犬'=>'dog', '猫'=>'cat', '豚'=>'pig');

print "犬 は、$list{'犬'} です。\n";
print "猫は、$list{'猫'} です。\n";
print "豚は、$list{'豚'} です。\n";
犬は、dog です。
猫は、cat です。
豚は、pig です。
これと同じことを代入文で行うと、
$list{'犬'} = 'dog';
$list{'猫'} = 'cat';
$list{'豚'} = 'pig';

print "犬 は、$list{'犬'} です。\n";
print "猫は、$list{'猫'} です。\n";
print "豚は、$list{'豚'} です。\n";


■ ハッシュ・配列操作関数

ハッシュにどのようなキー(箱の名前)が存在しているかわからない場合、次のようにキーを配列変数に抽出することができる。
@key = keys(%data);

また、foreach文と組み合わせることも可能である。
foreach $key ( keys %data )
{
    print "$key $data{$key}\n";
}

さらに、配列の中身を並べ替えてくれる sort 関数と組み合わせることも可能。
foreach $key ( sort keys %data )
{
    print "$key $data{$key}\n";
}

【演習】
$str = "atcgggcaattcctag";

ハッシュ変数を用いて、アルファベットの個数を数えるプログラムを作ろう。

戻る
©kazuo