Perl入門 ≫ LESSON12 文字列操作関数
文字列操作関数
Perlでは、文字列に関する色々な関数が用意されています。
●chop:最後の文字削除
chop リスト
最後の文字を削除して、最後に削除された文字を返します。
my $v = "test1";
#最後の一文字を落す
my $d = chop $v;
#落した文字と残りを表示
print "delete '$d'\n";
print "$v";
結果
delete '1'
test
よく使う方法としては、ファイルの読み込み時に、ファイルの中身を一行ずつ読込んでいくので、行の最後に必ずついている改行コードを落とす場合です。
#test.plという名前のファイルを開く
open(FILE, "<test.pl")
|| die "file open error!";
while(my $line = <FILE>) {
chop $line;
print "$line\n";
}
close(FILE);
例えば、上のスクリプトを書いたファイル自身(test.pl)を読込んで出力させてみます。
出力部分で print "$line\n"; と、最後に改行コードを付けているので改行されますが、print "$line";とやると全ての行が改行されません。
両方やってみてください。
●crypt:暗号化
crypt 対象文字列 , キー
対象文字列を暗号化します。キーになる部分(文字列・数字)によって変化します。 だたし、復元はできません。
my $v = crypt 'test', 1;
print "$v\n";
my $s = "test2";
$v = crypt $s , 'key';
print "$v";
結果
1A/c8vPQJQiL2
keKIQhxeKtKLo
●eval:評価
eval 評価文
評価文をPerlプログラムとして解釈実行し、最後に評価された式の値を返します。
エラーがあった場合、undefを返し、特殊変数$@にエラーメッセージを設定します。
my $s = "print \"a\n\"";
#print "a\n"を評価
my $v = eval $s;
#間違った構文を評価
$v = eval "printt $v";
print "$v";
print "error : $@";
結果
a
~ここでシステムからのエラーメッセージの表示~
error : syntax error at (eval 2) line 1, near "printt 1"
●index:文字位置
index 文字列1, 文字列2 [, オフセット]
文字列1のオフセット目以降にある文字列2の位置を返します。
文字列2が見つからない場合は-1を返します。オフセットを省略すると最初から。
文字の位置は、最初から0,1,..と数えます。
#オフセット4(二回目の”h”)から最初の”og”
my $v = index "hogehoge", 'og', 4;
print "$v\n";
#最初の文字から”oh”(存在しない)
$v = index "hogehoge", 'oh';
print "$v";
結果
5
-1
●rindex:文字位置(最後から)
rindex 文字列1, 文字列2 [, オフセット]
文字列1のオフセット目、またはそれより前にある、最後の文字列2の位置を返します。
文字列2が見つからない場合は-1を返します。オフセットを省略すると最後から。
文字の位置は、最初から0,1,..と数えます。
#オフセット4(二回目の”h”)から逆に見て最初の”og”
my $v = rindex "hogehoge", 'og', 4;
print "$v\n";
#最後の文字から”oh”(存在しない)
$v = rindex "hogehoge", 'oh';
print "$v";
結果
1
-1
●substr:文字取り出し
substr 文字列1, オフセット [, 長さ [, 文字列2]]
文字列1のオフセット目から指定した長さ分だけ取り出してそれを返します。
オフセットが負なら文字列の末尾から数えます。
長さが負ならば、文字列の末尾から指定された文字数だけを残します。
文字列2が指定された場合は、そこで部分文字列を置き換えます。
my $s = "hogehoge";
#オフセット3(4文字目)から最後まで
my $v = substr $s, 3;
print "$v\n";
#2文字目から1文字分(”o”)を”oh”で置き換え
$v = substr $s, 1, 1, 'oh';
print "$s\n";
#オフセット3(4文字目)から最後までに”aa”を代入
substr($s, 3) = 'aa';
print "$s";
結果
ehoge
hohgehoge
hohaa
●lc:小文字変換
lc 文字列
文字列を小文字に変換した結果を返します。
my $v = lc 'ABcdEf';
print "$v\n";
my $x = 'HogehOGE';
$v = lc($x);
print "$v";
結果
abcdef
hogehoge
●lcfirst:最初の文字を小文字変換
lcfirst 文字列
文字列の最初の文字をを小文字に変換した結果を返します。
my $v = lcfirst 'ABcdEf';
print "$v\n";
my $x = 'HogehOGE';
$v = lcfirst($x);
print "$v";
結果
aBcdEf
hogehOGE
●uc:大文字変換
uc 文字列
文字列を大文字に変換した結果を返します。
my $v = uc 'aBcdEf';
print "$v\n";
my $x = 'HogehOGE';
$v = uc($x);
print "$v";
結果
ABCDEF
HOGEHOGE
●ucfirst:最初の文字大文字変換
ucfirst 文字列
文字列の最初の文字をを大文字に変換した結果を返します。
my $v = ucfirst 'aBcdEf';
print "$v\n";
my $x = 'HogehOGE';
$v = ucfirst($x);
print "$v";
結果
ABcdEf
HogehOGE
●length:文字列の長さ
length 文字列
文字列の長さを返します。
my $v = length 'test';
print "$v\n";
#長さ0の文字列
my $x = '';
$v = length($x);
print "$v";
結果
4
0
●quotemeta:制御文字エスケープ
quotemeta 文字列
文字列の全ての正規表現制御文字をエスケープした結果を返します。
#制御文字は\nのみ
my $v = quotemeta 'Hello\nWorld';
print "$v";
結果
Hello\\nWorld