【发布时间】:2017-05-01 22:55:43
【问题描述】:
我试图了解分配子例程的结果是否会导致复制该数据。
sub maketext { 'text' };
my $foo = maketext();
my $foo_ref = \$foo;
my $bar_ref = \maketext();
在上面的例子中,$foo_ref 的创建会比$bar_ref 的创建多一个副本吗?
我如何让自己相信它们的等价或不等价?
【问题讨论】:
-
即使考虑在这里花费的时间也是一个巨大的错误。您应该考虑哪个代码更具可读性。如果您的结果如此巨大,复制确实会产生实际影响,您应该返回一个参考。
-
“过早的优化是万恶之源”。想都别想了,小事一桩。除非不是,但为此您使用代码分析器。
-
不一定是微优化。我不知道答案,我很想知道它是什么,只是因为。
-
上下文:我正在使用一个名为
WWW::Mechanize::content的函数并将结果传递给另一个函数。我想知道我写my $content_ref = \$mech->content; foo($content_ref)或my $content = $mech->content; foo(\$content);是否会有所作为,纯粹是出于兴趣。现在我明白后者会复制标量,但不会复制基础数据,因此差异可以忽略不计。
标签: perl reference pass-by-value