
sub autoLOAD { my $member = $autoLOAD; # ... do something if kNowing how to handle '$member' # otherwise ?} 在包上调用一个不存在的子例程(比如my_method)时,Perl通常会说类似的东西
Can't locate object method "my_method" via package "MyPackage" at Package.pm line 99.
我希望Perl显示此标准消息,以防我不知道如何在我的autoLOAD实现中处理对子例程$member的调用.
我怎样才能做到这一点?
我发现没有可能包含相应消息的特殊变量.此外,Perl documentation on Autoloading没有提供此问题的提示.
备注:我想避免重写错误消息,而是使用Perl提供的标准消息.
解决方法 不幸的是,你做不到. Perl首先尝试在包中找到一个方法,然后在@ISA中找到它的父包,最后是UNIVERSAL.接下来,它会重复该过程,但会搜索autoLOAD以代替方法名称. perl的唯一方法是在调用时引发异常,如果找不到方法的话.如果perl调用了你的autoLOAD子程序,它已经超出了定位方法的位置,它只能在autoLOAD的堆栈框架内死掉.如果您绝对需要在调用方法的地方死亡,那么您唯一的选择就是避免使用autoLOAD并定义所有方法.
但是,如果只是为了外观,这将伪造它:
sub autoLOAD { my ($package,$method) = $autoLOAD =~ /^(.*)::([^:]*)/; dIE sprintf(qq{Can't locate object method "%s" via package "%s" at %s line %d.\n},$method,$package,(caller)[1,2]);} 总结 以上是内存溢出为你收集整理的perl – 如果AUTOLOAD失败,则传递错误消息全部内容,希望文章能够帮你解决perl – 如果AUTOLOAD失败,则传递错误消息所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)