小池啓仁 ヒロヒト応援ブログ By はてな

小池啓仁(コイケヒロヒト)の動画など。

小池啓仁 ヒロヒト応援ブログ By はてな

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';