perl – 如何欺骗原型检查?
发布时间:2020-12-16 06:05:35 所属栏目:大数据 来源:网络整理
导读:想为一些外来的perl模块写一个简单的包装器.简化示例: use 5.014;use warnings;#foreign packagepackage Some { sub func { my($x,$y) = @_; return $x.$y; }};#my own packagespackage My { #use Some (); sub func { Some::func(@_); }}package main { #u
想为一些外来的perl模块写一个简单的包装器.简化示例:
use 5.014; use warnings; #foreign package package Some { sub func { my($x,$y) = @_; return $x.$y; } }; #my own packages package My { #use Some (); sub func { Some::func(@_); } } package main { #use My; say My::func("res","ult"); } 这样可以正常打印结果. 但是现在我遇到了一个使用原型的模块,例如以上看起来像: package Some { sub func($$) { # <-- prototype check my($x,$y) = @_; return $x.$y; } }; 在尝试使用My wrapper包时,它说: Not enough arguments for Some::func at ppp line 16,near "@_)" 可能在原型检查中“作弊”,或者我必须编写我的包装器吗? sub func { Some::func($_[0],$_[1]); } 甚至 sub func($$) { Some::func($_[0],$_[1]); } 解决方法&Some::func(@_); # Bypass prototype check. 还有其他选择. (&;Some::func)->(@_); # Call via a reference. &Some::func; # Don't create a new @_. goto &Some::func; # Don't create a new @_,and remove current call frame from stack. 方法调用总是忽略原型. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |