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

前端之家收集整理的这篇文章主要介绍了perl – 数字和字符串之间自动转换的效率没有影响?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
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"\0
  CUR = 2
  LEN = 4
SV = PVIV(0x8f7a2fc) at 0x8f82d88
  REFCNT = 1
  FLAGS = (PADMY,IOK,pIOK,pPOK)
  IV = 15
  PV = 0x8f7ecb8 "15"\0
  CUR = 2
  LEN = 4
SV = PVIV(0x8f7a2fc) at 0x8f82d88
  REFCNT = 1
  FLAGS = (PADMY,pIOK)
  IV = 5
  PV = 0x8f7ecb8 "15"\0
  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.但只需要这样做一次.

猜你在找的Perl相关文章