在 perl 中如何在不使用 XS 的情况下写入调用者的变量?
in perl how to write to caller's variable without using XS?
我正在围绕一些旧代码编写单元测试,发现需要围绕 Apache2::Request 的 read()
方法编写模拟
my $r = Apache2::Request->new(...);
$r->read(my $buf, $len);
有没有办法在 Perl 中编写函数来填充 $buf
?我很确定唯一的方法是使用带有 ** 的 XS 代码,但我想我至少会先问一下。
使用Apache2::Request直接导致这个,因此我想嘲笑它。
perl: symbol lookup error: .../APR/Request/Apache2/Apache2.so:
undefined symbol: modperl_xs_sv2request_rec
在 Perl 子例程或方法中,参数通过 @_
数组传递。此数组中的元素是调用子程序中变量的 别名。
解压@_
的常用方法是像这样复制:
my($self, $buf, $len) = @_;
因此在这种情况下分配给 $buf
将不起作用,因为您只修改了变量的副本。但是如果你直接修改@_
中的值那么就会影响调用者的变量:
$_[1] = 'some data';
我正在围绕一些旧代码编写单元测试,发现需要围绕 Apache2::Request 的 read()
方法编写模拟
my $r = Apache2::Request->new(...);
$r->read(my $buf, $len);
有没有办法在 Perl 中编写函数来填充 $buf
?我很确定唯一的方法是使用带有 ** 的 XS 代码,但我想我至少会先问一下。
使用Apache2::Request直接导致这个,因此我想嘲笑它。
perl: symbol lookup error: .../APR/Request/Apache2/Apache2.so:
undefined symbol: modperl_xs_sv2request_rec
在 Perl 子例程或方法中,参数通过 @_
数组传递。此数组中的元素是调用子程序中变量的 别名。
解压@_
的常用方法是像这样复制:
my($self, $buf, $len) = @_;
因此在这种情况下分配给 $buf
将不起作用,因为您只修改了变量的副本。但是如果你直接修改@_
中的值那么就会影响调用者的变量:
$_[1] = 'some data';