加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl – 数字和字符串之间自动转换的效率没有影响?

发布时间:2020-12-16 06:09:10 所属栏目:大数据 来源:网络整理
导读:Perl中的数字和字符串之间有自动转换. 来自Llama的书: You don’t need to worry about the difference between numbers and strings; just use the proper operators,and Perl will make it all work. And if you’re worried about efficiency,don’t be.
Perl中的数字和字符串之间有自动转换.

来自Llama的书:

You don’t need to worry about the
difference between numbers and
strings; just use the proper
operators,and Perl will make it all
work.

And if you’re worried about
efficiency,don’t be. Perl generally
remembers the result of a conversion
so that it’s done only once.

这是怎么回事?我的意思是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.但只需要这样做一次.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读