在perl中导出vs export_ok
我不明白EXPORT_OK vs EXPORT有什么区别/用例。
大多数资源都提到了以下几点:
但我真的看不到这里的区别/含义。 解决方法
假设我有一个使用@EXPORT的包MyPackage。
#this is MyPackage.pm package MyPackage; @EXPORT = qw(do_awesome_thing); sub do_awesome_thing { ... } sub be_awesome { ... } 现在,当我在我的代码中使用MyPackage时, #this is myscript.pl use MyPackage; do_awesome_thing(); #works be_awesome(); #doesn't work MyPackage::be_awesome(); #works do_awesome_thing会自动从MyPackage导出到我的代码,而我不必说“给我这个”。 be_awesome不会导出(也不会使用@EXPORT_OK导出),我只是显示该部分,让您清楚“导出”给我们什么。 另一方面,如果我有一个使用@EXPORT_OK的MyOtherPackage包, #this is MyOtherPackage.pm package MyOtherPackage; @EXPORT_OK = qw(do_awesome_thing); sub do_awesome_thing { ... } sub be_awesome { ... } 然后尝试 #this is mynewscript.pl use MyOtherPackage; do_awesome_thing(); #doesn't work MyOtherPackage::do_awesome_thing(); #works,as always 直接调用do_awesome_thing的行将不起作用。这是因为把一些东西放在@EXPORT_OK里说“只有在他们要求的时候才给我的用户”。由于我们刚刚说过使用MyOtherPackage,而是没有显式要求在这里导入do_awesome_thing,它不会被导入,只能通过指定包名来访问。 要求导入do_awesome_thing的方式是在上面的mynewscript.pl的第二行使用MyOtherPackage qw(do_awesome_thing)。这表示导入该模块并使do_awesome_thing直接可用。之后,上面的mynewscript.pl第四行开始工作。 请注意,用户也可以使用第一个包中的MyPackage qw(do_awesome_thing),在这种情况下,@EXPORT列表中的其他任何内容都将不被导出,只有do_awesome_thing将被执行。所以,除了使用PackageName的默认情况; @EXPORT和@EXPORT_OK的行为类似。在默认情况下,@EXPORT中的任何内容都会自动抛入用户脚本中,而@EXPORT_OK更有礼貌,并且不会导出任何内容。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |