gpt4 book ai didi

Perl 变量赋值副作用

转载 作者:行者123 更新时间:2023-12-01 07:50:04 28 4
gpt4 key购买 nike

我会第一个承认 Perl 不是我的强项。但是今天我遇到了这段代码:

my $scaledWidth = int($width1x * $scalingFactor);
my $scaledHeight = int($height1x * $scalingFactor);
my $scaledSrc = $Media->prependStyleCodes($src, 'SX' . $scaledWidth);

# String concatenation makes this variable into a
# string, so we need to make it an integer again.
$scaledWidth = 0 + $scaledWidth;

我可能在这里遗漏了一些明显的东西,但我在该代码中没有看到任何可以使 $scaledWidth 的内容。变成字符串。除非以某种方式第三行中的连接导致 Perl 永久更改 $scaledWidth 的类型.那看起来……很奇怪。

我搜索了一些“perl 赋值副作用”和类似的术语,但没有找到任何东西。

你们中的任何一个 Perl 大师能告诉我那行注释的代码是否真的有用吗?在串联表达式中使用整数变量真的会改变该变量的类型吗?

最佳答案

它只是一点点有用。

Perl 可以将标量值存储为数字或字符串或两者,这取决于它的需要。

use Devel::Peek;
Dump($x = 42);
Dump($x = "42");

输出:
SV = PVIV(0x139a808) at 0x178a0b8
REFCNT = 1
FLAGS = (IOK,pIOK)
IV = 42
PV = 0x178d9e0 "0"\0
CUR = 1
LEN = 16

SV = PVIV(0x139a808) at 0x178a0b8
REFCNT = 1
FLAGS = (POK,pPOK)
IV = 42
PV = 0x178d9e0 "42"\0
CUR = 2
LEN = 16
IVIOK token 指的是如何将值存储为数字以及当前整数表示是否有效,而 PVPOK指示字符串表示形式以及它是否有效。在字符串上下文中使用数字标量可以更改内部表示。
use Devel::Peek;
$x = 42;
Dump($x);
$y = "X" . $x;
Dump($x);

SV = IV(0x17969d0) at 0x17969e0
REFCNT = 1
FLAGS = (IOK,pIOK)
IV = 42

SV = PVIV(0x139aaa8) at 0x17969e0
REFCNT = 1
FLAGS = (IOK,POK,pIOK,pPOK)
IV = 42
PV = 0x162fc00 "42"\0
CUR = 2
LEN = 16

Perl 会根据需要无缝地将一种转换为另一种,并且 Perl 程序员很少需要担心内部表示。

我很少说因为 there are some known situations where the internal representation matters .

关于Perl 变量赋值副作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59938993/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com