虽然,例如,perldata文件表明Perl中的标量字符串仅受可用内存的限制,但我强烈怀疑在现实生活中会有其他一些限制。
我考虑了以下想法:
2 ** 31
,2 ** 32
, 2 ** 63
或2 ** 64
字节。那么,在现实生活中限制Perl字符串长度的其他因素是什么?出于实际目的,应该考虑一个好的字符串长度?
答案 0 :(得分:14)
它跟踪缓冲区的大小和其中的字节数。
$ perl -MDevel::Peek -e'$x="abcdefghij"; Dump($x);'
SV = PV(0x9222b00) at 0x9222678
REFCNT = 1
FLAGS = (POK,pPOK)
PV = 0x9238220 "abcdefghij"\0
CUR = 10 <-- 10 bytes used
LEN = 12 <-- 12 bytes allocated
在32位构建的Perl上,它对这些值使用32位无符号整数。这(确切地)足够大,可以创建一个字符串,用于占用您的进程的整个4 GiB地址空间。
在64位版本的Perl上,它对这些值使用64位无符号整数。这(足够大)足以创建一个字符串,该字符串会耗尽您的流程的整个16 EiB地址空间。
文档是正确的。字符串的大小仅受可用内存的限制。