substrの振る舞い
substr関数は、全文字列中(expr)をオフセット(offset)から指定長分(length)を取得したり、それを置換文字列で置換したりします。
ただし、正規表現は使えない。
offsetやlengthをマイナスにする時は、要チェックです。
構文
substr(expr, offset, length)
テストサンプルソース(test.pl)
use strict; use warnings; my $string = "01234567890123456789"; my $str1 = substr($string, 0); my $str2 = substr($string, 2); my $str3 = substr($string, 2, 3); my $str4 = substr($string, -1); my $str5 = substr($string, -2); my $str6 = substr($string, 0, -1); my $str7 = substr($string, 0, -2); my $str8 = substr($string, 3, 2); my $str9 = substr($string, 3, -2); my $str10 = substr($string, -3, 2); my $str11 = substr($string, -3, -2); print "\$string \t\t\t = 01234567890123456789\n"; print "substr(\$string, 0); \t = $str1", "\n"; print "substr(\$string, 2); \t = $str2", "\n"; print "substr(\$string, 2, 3); \t = $str3", "\n"; print "substr(\$string, -1); \t = $str4", "\n"; print "substr(\$string, -2); \t = $str5", "\n"; print "substr(\$string, 0, -1); \t = $str6", "\n"; print "substr(\$string, 0, -2); \t = $str7", "\n"; print "substr(\$string, 3, 2); \t = $str8", "\n"; print "substr(\$string, 3, -2); \t = $str9", "\n"; print "substr(\$string, -3, 2); \t = $str10","\n"; print "substr(\$string, -3, -2); \t = $str11","\n";
テストサンプル実行結果
C:\test>perl test.pl $string = 01234567890123456789 substr($string, 0); = 01234567890123456789 substr($string, 2); = 234567890123456789 substr($string, 2, 3); = 234 substr($string, -1); = 9 substr($string, -2); = 89 substr($string, 0, -1); = 0123456789012345678 substr($string, 0, -2); = 012345678901234567 substr($string, 3, 2); = 34 substr($string, 3, -2); = 345678901234567 substr($string, -3, 2); = 78 substr($string, -3, -2); = 7
ちなみに、データの抽出だけでなく、substrを左辺に書けば代入もできる。
substr($string, 2, 3) = '234';