perl – 引用相等的字符串

perl – 引用相等的字符串,第1张

概述在Perl中,如果我创建两个对数组元素的引用,则两个指针是相等的. my $ref1 = \$array[0];my $ref2 = \$array[0];print "$ref1\n$ref2"; 这同样适用于对存储字符串的变量的两个引用,这些指针是相等的. 如果我创建两个存储相等字符串的变量,则引用不相等. 为什么他们不平等?相同的数据存储在不同的地方? Perl是否引用变量而不是内存位置 在Perl中,如果我创建两个对数组元素的引用,则两个指针是相等的.

my $ref1 = $array[0];my $ref2 = $array[0];print "$ref1\n$ref2";

这同样适用于对存储字符串的变量的两个引用,这些指针是相等的.

如果我创建两个存储相等字符串的变量,则引用不相等.

为什么他们不平等?相同的数据存储在不同的地方?

Perl是否引用变量而不是内存位置?

在Java中,如您所见,here,四个相等的字符串指的是相同的内存位置.

有人可以解释一下吗?

解决方法 如果您对一个变量进行多次引用,则所有变量都将指向相同的内存位置.

my $foo = 'foo';my $ref1 = $foo;my $ref2 = $foo;say $ref1;say $ref2;

$ref1和$ref2背后的值是相同的,因为它们都指向同一个变量.

SCALAR(0x171f7b0)SCALAR(0x171f7b0)

如果将字符串(不是包含字符串的同一变量)分配给两个新变量,然后为这些变量引用,则它们将是不同的.

my $foo = 'foo';my $bar = 'bar';my $ref1 = $foo;my $ref2 = $bar;say $ref1;say $ref2;

这里,$ref1和$ref2不一样,因为它们是对两个不同变量的引用.

SCALAR(0x20947b0)SCALAR(0x2094678)

两个变量保持相等的值并不重要.

my $ref1 = \'foo';my $ref2 = \'foo';say $ref1;say $ref2;

如果您直接接受对值的引用而不将其首先放入另一个变量,则同样如此.

SCALAR(0x1322528)SCALAR(0x12ee6f0)

Perl在内部处理内存,但它不像它有一个包含每个可能字符串的表,并且无论何时创建引用,它只使用该内存地址.

在Java中,字符串是对象. Java知道可用的对象.定义字符串时,它会生成一个对象. Perl的情况并非如此.字符串和数字只是值,当您使用它们时它们会被放入内存中.

Perl所做的是跟踪其引用.它将通过删除未使用的值来释放内存,但前提是这些值不再存在于正在运行的程序中的其他位置.这称为引用计数.

你可以在perlref中阅读有关参考文献.在damian Conway at Mannings的“面向对象的Perl”一书中,还有一个很好的解释.

总结

以上是内存溢出为你收集整理的perl – 引用相等的字符串全部内容,希望文章能够帮你解决perl – 引用相等的字符串所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1245131.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-07
下一篇2022-06-07

发表评论

登录后才能评论

评论列表(0条)

    保存