在尝试覆盖PERL CORE :: open函数时,我尝试了这个简单的测试用例,它起作用了:
BEGIN {
*CORE::GLOBAL::open = sub {
if (defined $_[2]) {
CORE::open $_[0], $_[1], $_[2];
} else {
CORE::open $_[0], $_[1];
}
}
为什么不使用@_工作?:
BEGIN {
*CORE::GLOBAL::open = sub {
CORE::open @_;
}
}
我明白了:
“严格参考”......
时,不能使用字符串(“3”)作为符号引用
我覆盖函数的目的是在调用open时打印堆栈跟踪(上面的代码片段中没有显示)。
注意open是用三个参数形式调用的,但是我想概括一下override方法,这样我就不会测试特定数量的参数,也就是说我不需要知道有多少参数预期。
my $fh;
open $fh, ">", "tmp.dummy" ;
答案 0 :(得分:1)
像大多数运营商一样'操作数,open
的操作数在标量上下文中进行评估。