これが定義された動作であるかどうかはわかりません。私は次のコードを持っています:
use strict;
use warnings;
use Data::Dumper;
my $string = 'aaaaaa0aaaa';
my $char = substr($string, length($string), 1);
my $char2 = substr($string, length($string)+1, 1);
print Dumper($char);
print Dumper($char2);
文字列の終わりを過ぎたという警告が1つ表示されるだけでなくsubstr()
、出力について混乱しています。
$VAR1 = '';
$VAR1 = undef;
Perldocは次のように述べていsubstr
ます:
substr EXPR、OFFSET、LENGTH
OFFSETとLENGTHが部分的に文字列の外側にある部分文字列を指定した場合、文字列内の部分のみが返されます。サブ文字列が文字列のいずれかの端を超えている場合、substr()は未定義の値を返し、警告を生成します。
length($string)
とは両方とも文字列の(ゼロインデックスの)末尾を超えているため、ある場合と別の場合に空の文字列を返すlength($string) + 1
理由がわかりません。Cが文字列の終了に使用し、最初のケースで何らかの形で返されるNULL文字と関係があるので、この文字列にはカウントされない「非表示」の最後の文字がありますか?ここで明らかな何かが欠けていますか?substr
undef
substr
length