在Perl中如何在不使用XS的情况下写入调用者的变量?

Kev*_* G. 8 perl mocking mod-perl2

我正在编写一些旧代码的单元测试,并发现需要围绕Apache2 :: Request的read()方法编写一个模拟

my $r = Apache2::Request->new(...);

$r->read(my $buf, $len);
Run Code Online (Sandbox Code Playgroud)

有没有办法在Perl中编写一个函数来填充$buf?我很确定这样做的唯一方法是使用带有**的XS代码,但我想我至少先问一下.

使用Apache2 :: Request直接导致这种情况,因此我希望嘲笑它.

perl: symbol lookup error: .../APR/Request/Apache2/Apache2.so: 
undefined symbol: modperl_xs_sv2request_rec
Run Code Online (Sandbox Code Playgroud)

Gra*_*ean 9

在Perl子例程或方法中,参数通过@_数组传递.此数组中的元素是调用sub中变量的别名.

解包的常用方法@_是制作这样的副本:

my($self, $buf, $len) = @_;
Run Code Online (Sandbox Code Playgroud)

因此,$buf在这种情况下分配将不起作用,因为您只修改了变量的副本.但是如果你直接修改@_那个会影响调用者变量的值:

$_[1] = 'some data';
Run Code Online (Sandbox Code Playgroud)

  • 哈哈,我真的在外面想到自己.谢谢! (2认同)