www.ugnews.info

文字列処理関数

こんにちは。暑いから妹が熱中症で倒れた。

今日は文字列処理関数をやりました。

まずは関数substrを使って文字列の一部分を切り出したりした。

use strict;
use warnings;

my $unko = substr('Cannibal Corpse', 0, 7);
print "$unko\n";
print "\n";

これを実行すると

Canniba

って出る。この場合、「Cannibal Corpse」という文字列の最初の7文字(7バイト)が得られるわけですね。

で、「Corpse」って文字列を得たいなーってときはこんな感じで書く

my $unko2 = substr('Cannibal Corpse', 9, 6);
print "$unko2\n";
print "\n";

これを実行すると

Corpse

って出る。ってあー、この場合はこういう書き方の方がいい。これは9番目の文字から残り以降すべてを表示する書き方。

my $unko3 = substr('Cannibal Corpse', 9);
print "$unko3\n";
print "\n";

結果はこんな感じ。こっちの方がラクだよね。

Corpse

イエー!おれは高校時代にCannibal Corpseとか聴いてたから青春とかするヒマなかった。


―――――――――――――――――――――


次は、関数substr使って文字列を置き換えることをやった。

my $mayhem = 'Black Metal is Violence....';
my $burzum = substr($mayhem, 15, 8, 'Cool');
print q{$mayhem} , " = $mayhem";
print "\n";
print q{$burzum} , " = $burzum";
print "\n";

こんなメタラー以外というかそもそもメタラーが見ても白ける関数名でアレで複雑になってしまった。これは$mayhemに入ってた「Black Metal is Violence....」の「Violence」って部分を、「Cool」に置き換えろって$burzumに命令させてるよって$mayhemの中は「Black Metal is Cool....」になる。んで、$burzumの中は$mayhemから頂いた「Violence」になる。

これを実行するとこうなる。

$mayhem = Black Metal is Cool....
$burzum = Violence

よかったですね。

―――――――――――――――――――――


次は、関数indexを学んだ。関数indexは、文字列に含まれてる別の文字列の位置を知ることができるらしいよ。

print index(q{Red Hot Chili Peppers}, q{Chili}), "\n";
print "\n";

これを実行するとこうなる。

8

これは、文字列「Red Hot Chili Peppers」の中のどこに「Chili」があるかを調べてる。で、「Chili」は8の位置にあるってのが分かる。

ちなみに、探してる文字列がない場合、indexの値は-1になる。

print index(q{Red Hot Chili Peppers}, q{Flea}), "\n";
print "\n";

実行すると

−1

ほらね。

もしも文字列が2箇所以上あった場合、関数indexは左から見て一番はじめのヤツの位置を出す。

print index(q{Red Hot Chili Peppers}, q{i}), "\n";

↓

10

あと、関数rindexというのもある。これは一番最後に見つかった位置を出す。

print rindex(q{Red Hot Chili Peppers}, q{i}), "\n";

↓

12

こんな感じ。便利なんだか便利じゃないんだかよく分からん関数ですね。てっきりHTMLのindex.htmlみたいに大事なものかと思ってた。



―――――――――――――――――――――


最後は文字列置換。s/ugnews/satan/みたいな。Twitterでよくみるのはこれだったのか。

こんな感じで書いた。

use strict;
use warnings;

my $str = "I like Aerosmith.";
$str =~ s/Aerosmith/EXILE/;
print q{$str}, " = $str\n\n";

実行するとこんな感じ

$str = I like EXILE.

なんてことだ!

もうちっと書いてみる。日本語もイケるから俺の本音とか書いた。

my $str2 = "安物の香水が鼻に付く(x_x)";
$str2 =~ s/安物の香水/まなめ/;
print q{$str2}, " = $str2\n";

実行するとこうなる

$str2 = まなめが鼻に付く(x_x)

最近こういうこと書きすぎてるのでそろそろまなめsanにキレられる。


―――――――――――――――――――――


今回はこんな感じ。次はヒアドキュメントをやるよ。


―――――――――――――――――――――


dokuoさんに教えてもらったんだけど、

コマンドプロンプトは右クリ範囲指定で範囲指定してエンター押せばコピーできる

だそうです。実際やったら出来たよ!ありがとうございます。


あとはotsuneさんがブログにコメントをくれたよ。また色々と教えてもらったのでこのエントリーに書いてみよう。「調べる→自分で書く」はやばい、覚える。

># 引用符をつけたい場合、\を置く
>my $name2 = "\"saten\"";

my $name2 = '"saten"';
と'のシングルクォートで囲むとエスケープしない。(ついでにいうと$hogeなどを展開しない)

でもシングルクォートは目でわかりにくいので
my $name2 = q{"saten"};
とか
my $name2 = q/"saten"/;
みたいなqを使うのがPBP的にオススメ。 

とのことです。というワケで今回からコッソリとq{}といった感じで書いてます。エスケープというのは文字化けなどを回避したりするとかいう意味っぽい。

あと、PBPというのは「Perl Best Practice」の略で、有名なPerl本のことらしい。ヒゲのdankogaiがエントリー書いてたよ。「Perlをこういう風な書き方をしたらいいよ〜」という本みたい。勉強になるなー。