gpt4 book ai didi

perl - 我可以定义一个可以像内置函数一样在任何地方调用的子程序吗?

转载 作者:行者123 更新时间:2023-12-01 11:50:09 25 4
gpt4 key购买 nike

目前,在调试过程中,我倾向于插入

carp Dumper \@foo, \%bar;

语句到我的代码中,经常遇到 CarpData::Dumper 没有导入当前包的问题。为了避免这个问题,我在一个始终包含的中央文件中定义了以下子文件:

sub main::bla {
use Carp; use Data::Dumper;
carp Dumper @_;
}

现在我可以做

main::bla \@foo, \%bar;

无处不在,但是 main:: 让我很烦。有没有像全局包这样的东西,它总是在任何包中自动导入(就像内置函数几乎在任何地方都被导入一样)?

最佳答案

你可以直接调用它

::bla( \@foo, \%bar );

早些时候,我习惯于将 util 函数放在 Ut 包中。这很好,但我注意到我的代码并不像我想象的那样真正模块化。每个依赖于 Ut 函数的模块只有在有人不厌其烦地构建那个命名空间时才能成功。

最后,我认为 userequire 语句只是记录依赖关系。有更灵活的方法来更改库模块调用的代码,而不是更改它们在 main 中的实现。

例如,您可以在单个 use 语句中执行此操作。

use Ut blah => sub { 
use Carp;
use Data::Dumper;
carp Dumper @_;
};

并定义导入:

sub import { 
shift; # It's just me
my ( $name, $impl ) = @_;
if ( $name eq 'blah' && ref( $impl ) eq 'CODE' ) {
*blah = $_[1];
}
...
}

当我同时开发大量代码时,我仍然使用 ut 模式。但我不介意写

ut:dump_var( $var )

而不是保存 3-4 个字符(因为有时我称之为 U::)。

现在看来,您不想长期这样做,转储变量对于开发来说是一件有用的事情。如果你真的想这样做,Smart::Comments是这样吗:

### @foo
### %bar

只需要一个 use 语句。

use Smart::Comments;

关于perl - 我可以定义一个可以像内置函数一样在任何地方调用的子程序吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11969064/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com