Perl   发布时间:2022-04-07  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了perl read()函数和缓冲区背后的魔力是什么?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我不明白Perl read($buf)函数如何能够修改$buf变量的内容. $buf不是引用,因此参数由copy(来自我的c / c知识)给出.那么为什么在调用者中修改$buf变量呢?

它是一个平局变量还是什么?关于setbuf的C文档对我来说也是非常难以理解的

# Example 1
$buf=''; # it is a scalar,not a ref
$bytes = $fh->read($buf);
print $buf; # $buf was modified,what is the magic ?

# Example 2
sub read_it {
    my $buf = shift;
    return $fh->read($buf);
}
my $buf;
$bytes = read_it($buf);
print $buf; # As expected,this scope $buf was not modified

解决方法

不需要魔法 – 所有perl子程序都是别名调用,如果你愿意的话.第 perlsub号:

例如:

sub increment {
  $_[0] += 1;
}

my $i = 0;
increment($i);  # now $i == 1

在“示例2”中,read_it子将@_的第一个元素复制到词法$buf,然后通过调用read()“复位”该副本.传入$_ [0]而不是复制,看看会发生什么:

sub read_this {
  $fh->read($_[0]);  # will modify caller's variable
}
sub read_that {
  $fh->read(shift);  # so will this...
}

大佬总结

以上是大佬教程为你收集整理的perl read()函数和缓冲区背后的魔力是什么?全部内容,希望文章能够帮你解决perl read()函数和缓冲区背后的魔力是什么?所遇到的程序开发问题。

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。