Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以使用变量在perl中设置特定的名称空间吗_Perl - Fatal编程技术网

我可以使用变量在perl中设置特定的名称空间吗

我可以使用变量在perl中设置特定的名称空间吗,perl,Perl,我知道你能行 package Foo { # do stuff } 但我想我做不到 my $namespace = 'Foo'; package $namespace { # do stuff } 那么,有没有一种方法可以将块设置为给定名称空间中的“be”,并通过变量定义名称空间 或者——确切地说——是最简单的方法吗?不,在运行时计算的代码不能设置用于编译相同代码的包。太晚了。您必须推迟编译受影响的代码(例如,通过使用eval EXPR、do EXPR或require) (

我知道你能行

package Foo {
    # do stuff
}
但我想我做不到

my $namespace = 'Foo';

package $namespace {
    # do stuff
}
那么,有没有一种方法可以将块设置为给定名称空间中的“be”,并通过变量定义名称空间


或者——确切地说——是最简单的方法吗?

不,在运行时计算的代码不能设置用于编译相同代码的包。太晚了。您必须推迟编译受影响的代码(例如,通过使用
eval EXPR
do EXPR
require


(namespace::local不这样做。)

不,要做到这一点,您需要重新编译代码

因此,考虑到

my $foo = sub {
    # code here
};
做:


为什么需要它?可以用string
eval
来实现,但可能不应该。看来你最近做的事情真是一团糟。如果这是针对生产代码,我强烈建议您重新考虑您的方法。仅仅因为这是可能的,并不是应该这样做的理由。@simbabque-谢谢。我想你已经看过我最近的问题了,“非常混乱”听起来几乎像是一种恭维。我正试图让Mojo::Template允许使用至少一些Mojolicious::Plugin::DefaultHelper(或其克隆),而不必经过Mojolicious-以“布局”为优先考虑-另一个我的老问题。请就您遇到的实际问题寻求帮助,而不是这些所谓的问题解决方案。至少,你的问题要更清楚。这是几天来你第二次发布问题,相当于“我想做这不是代码做的事”。嗯,当你把它当作代码处理时,不是代码只会抛出一个错误,所以你迫使我们猜测你的问题是什么,因为你没有陈述。@ikegami-我明白你的意思,我完全感谢feednack,部分同意。我一开始考虑的是一个宽泛的问题,但最后却试图把它简化成一个更具体的问题。我看到一些广泛的问题(“我如何在Mojo::Template中启用Mojolious助手”在我脑海中成为XY的可行替代方案)被批评为过于模糊,或者没有答案。另外,其他人提出的更具体的问题对我来说似乎更有用,因为我以后会在谷歌上搜索。不过:我完全愿意接受建设性的批评(你也是),注意:如果重新编译发生在与原文不同的词汇环境中,这可能会失败(编译方式可能不同,也可能根本不会)。
my $newfoo = eval "package $package; sub " . B::Deparse->new->coderef2text($foo);