我不确定这是否是定义的行为。我有以下代码:
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);
除了收到关于字符串结尾的警告之外substr()
,我对输出感到困惑:
$VAR1 = '';
$VAR1 = undef;
Perldoc说substr
:
substr 表达式,偏移量,长度
如果 OFFSET 和 LENGTH 指定了部分在字符串之外的子字符串,则只返回字符串内的部分。如果子字符串超出字符串的任一端,则 substr() 返回未定义的值并产生警告。
两者length($string)
和length($string) + 1
都超出了字符串的(零索引)结尾,所以我不知道为什么substr
在一种情况下返回空字符串,在另一种情况下返回空字符串undef
。它是否与 C 用于字符串终止的 NULL 字符有关,并且substr
在第一种情况下以某种方式返回,因此该字符串有一个“不可见”的最后一个字符不计入length
?我在这里遗漏了一些明显的东西吗?