Akihiro's Programmer Blog

Technology Notes for Personal

「初めてのPerl」 第十四章

第十四章から。


第十四章 文字列処理とソート

内容


用語集

用語 説明
ソートサブルーチン ソート順を定義するサブルーチン


Point

index
# indexを使うと部分文字列を探すことが出来る
my $where = index("hogehoge", "o");    #=> $whereには1が入る

# 第一引数のどこに第二引数があるかが返ってくる
# 0から数えて何文字目かが分かる
# 見つからない場合は-1が返る
# ただし最初に見つかった文字のみ


# 第三引数には何文字目から探すかを指定できる
my $where = index("hogehoge", "o", 4);    #=> $whereには5が入る


# 後ろから数える場合はrindexを使う
my $where = rindex("hogehoge", "o");    #=> $whereには5が入る


substr
# substrを使うと部分文字列を取り出すことが出来る
my $string = substr("hogefugapiyo", 4, 4);    #=> $stringには"fuga"が入る

# 第二引数には開始位置、第三引数には文字数を入れる
# 第一引数の文字列から指定した位置の文字を取り出す


# 第二引数に負の値を指定すると後ろから開始位置を指定する
my $string = substr("hogefugapiyo", -4, 4);    #=> $stringには"piyo"が入る


sprintf
# sprintfで文字列のフォーマットを指定できる
my $string = sprintf("%s fuga %s", "hoge", "piyo");
#=> $stringには"hoge fuga piyo"が入る 

my $date = sprintf("%4d-%2d-%2d", 2014, 7, 13);
#=> $dateには"2014-07-13"が入る

my $num = sprintf("%.2f", 2.4999);    #=> $numには2.50が入る


ソートの順番を指定したい
# sortに対してソートサブルーチンを定義できる
my @some_numbers = (4, 8, 2, 5);
my @numbers = sort { $a <=> $b } @some_numbers;
#=> @numbersには(2, 4, 5, 8)が入る


my @some_strings = qw/d a c b/;
my @strings = sort { $a cmp $b } @some_strings;
#=> @stringsには("a", "b", "c", "d")が入る


# これは非常に単純な例(と言うよりソートサブルーチンを定義しなくても良い)
# もっと複雑なsortをしたい場合に使うと良い


# ハッシュの要素に対してソートしたい場合は
my %hash = ("a" => 1, "b" => 3, "c" => 2);
my @result = sort { $hash{$a} <=> $hash{$b} } keys %hash;
#=> @resultいは("a", "c", "b")が入る

# これはvalueの数値でソートしている


次回は

次回は第十五章から。