perl – 数字和字符串之间自动转换的效率没有影响?
Perl中的数字和字符串之间有自动转换.
来自Llama的书:
这是怎么回事?我的意思是Perl如何记住它以及多少时间? 即使是一个位,它不会影响效率吗? 解决方法
效率为什么要慢?
如果您自动或手动进行转换,则完全相同.但是通过自动执行,您只需输入更少的代码. perl中的标量变量可以包含许多不同的值.运行时(perl解释器)执行转换并将数字保存在标量内. 你可以用Devel::Peek看到这样的内部事物 #!/usr/bin/env perl use Devel::Peek; my $value = '15'; Dump($value); $value + 5; Dump($value); $value = 5; Dump($value); 输出: SV = PV(0x8f71040) at 0x8f82d88 REFCNT = 1 FLAGS = (PADMY,POK,pPOK) PV = 0x8f7ecb8 "15" CUR = 2 LEN = 4 SV = PVIV(0x8f7a2fc) at 0x8f82d88 REFCNT = 1 FLAGS = (PADMY,IOK,pIOK,pPOK) IV = 15 PV = 0x8f7ecb8 "15" CUR = 2 LEN = 4 SV = PVIV(0x8f7a2fc) at 0x8f82d88 REFCNT = 1 FLAGS = (PADMY,pIOK) IV = 5 PV = 0x8f7ecb8 "15" CUR = 2 LEN = 4 在这里你可以看到标量值(SV)将字符串“15”作为(PV),在添加之后它添加(IV)(整数值). 标量包含一个标志,以了解哪个值是正确的.在第一个转储中,您会看到标记POK,其中PV表示正确的当前值.如果您要求此值,perl可以立即返回此值. 添加后,您会看到“IOK”表示“IV”值也可以.实际上变量本身并没有改变,但是因为perl需要添加一个字符串才能进行从字符串到int的对话.添加后您看到的是POK??和IOK有效.这意味着Scalar当前拥有一个有效的字符串和一个有效的Integer.只要变量没有改变,两个值都是有效的,并且perl不需要进行对话. 但是在将值更改为整数5后,您会看到“POK”不再设置.此操作将IV设置为新值并使PV值无效.只要您使用$value作为整数,就不会发生任何额外的事情.只要在字符串上下文中使用$value,就会转换为字符串并更新PV并设置POK.但只需要这样做一次. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |