标签: perl reference scope
此代码之间的区别是什么:
sub createOutputFile { my $filepath = shift; open my $fh, '>', $filepath; return $fh;
当最后一行作为参考return \$fh返回时?
return \$fh
我知道$ fh存在于createOutputFile子例程的本地范围内,但是当我不使用引用时返回了什么?只要我使用不同的文件路径创建输出文件,当我使用引用时会遇到一些问题吗?
答案 0 :(得分:3)
如果您返回参考,您将获得参考。这意味着
print $ref
将返回
REF(0x600077f10)
您需要取消引用它才能获取文件句柄。离开子程序后它不会消失,因为它仍然是指向它的引用:你返回的那个(给定你将它分配给一个变量)。您可能知道,Perl使用引用计数,因此文件句柄不会被垃圾收集,直到没有引用它为止。
请注意,您无法在菱形运算符中使用解除引用(它被解释为glob),因此您必须使用变量
my $fh = $$fh_ref; while (<$fh>) {
或直接致电readline
while (readline $$fh_ref) {
文件路径与返回文件句柄的方式完全无关。