在 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';