Perl循环使用模块

Perl循环使用模块,perl,moose,Perl,Moose,我需要知道使用模块的这种做法是否正确: MyApp.pm package MyApp; use Moose; use MyApp::View; use MyApp::Config; sub view { return MyApp::View->new; } sub config { return MyApp::Config->new; } MyApp/View.pm package MyApp::View; use Moose; extends qw(MyApp)

我需要知道使用模块的这种做法是否正确:

MyApp.pm

package MyApp;
use Moose;
use MyApp::View;
use MyApp::Config;

sub view {
    return MyApp::View->new;
}
sub config {
    return MyApp::Config->new;
}
MyApp/View.pm

package MyApp::View;
use Moose;
extends qw(MyApp);

sub render {
}
MyApp/Config.pm

package MyApp::Config;
use Moose;
extends qw(MyApp);

sub get {
}
App.cgi

#App.cgi
use Moose;
extends qw(MyApp);
my $view = MyApp->view();
my $config = MyApp->config();
....
我很困惑,因为我在MyApp中使用了“use MyApp::View”,然后在配置模块中使用了“extends qw(MyApp);”。这被认为是坏消息吗


关于这一点,我想与App.cgi中同一实例中的视图和配置模块共享MyApp模块中的所有方法和变量。

这很正常,也不是特别糟糕。唯一需要注意的是,在编译和运行
MyApp::View
MyApp::Config
的包体时,
MyApp
不会被完全编译,它的一些方法可能不存在,因为
MyApp
MyApp::View
MyApp::Config
加载之后才能继续编译。在应用程序的正常执行期间(在
use MyApp
完成后),不存在此类问题。由于您在
BEGIN
块或包体本身中没有做任何有趣的事情,因此我看不出有任何问题。

这很正常,也不是特别糟糕。唯一需要注意的是,在编译和运行
MyApp::View
MyApp::Config
的包体时,
MyApp
不会被完全编译,它的一些方法可能不存在,因为
MyApp
MyApp::View
MyApp::Config
加载之后才能继续编译。在应用程序的正常执行期间(在
use MyApp
完成后),不存在此类问题。由于您在
BEGIN
块或包体本身中没有做任何有趣的事情,因此我看不出有任何问题。

这很正常,也不是特别糟糕。唯一需要注意的是,在编译和运行
MyApp::View
MyApp::Config
的包体时,
MyApp
不会被完全编译,它的一些方法可能不存在,因为
MyApp
MyApp::View
MyApp::Config
加载之后才能继续编译。在应用程序的正常执行期间(在
use MyApp
完成后),不存在此类问题。由于您在
BEGIN
块或包体本身中没有做任何有趣的事情,因此我看不出有任何问题。

这很正常,也不是特别糟糕。唯一需要注意的是,在编译和运行
MyApp::View
MyApp::Config
的包体时,
MyApp
不会被完全编译,它的一些方法可能不存在,因为
MyApp
MyApp::View
MyApp::Config
加载之后才能继续编译。在应用程序的正常执行期间(在
use MyApp
完成后),不存在此类问题。由于您在
BEGIN
块或包体本身中没有做任何有趣的事情,因此我看不出有任何问题。

如果您使用的是Moose,您不需要自己编写构造函数(
sub-new
)。这就是驼鹿的作用。代码中也有拼写错误。请将您的准确代码复制到问题中,并确保它事先运行。你真的试过吗?你不仅不需要在Moose代码中编写
sub-new
,这样做是错误的。如果你正在使用Moose,你不需要自己编写构造函数(
sub-new
)。这就是驼鹿的作用。代码中也有拼写错误。请将您的准确代码复制到问题中,并确保它事先运行。你真的试过吗?你不仅不需要在Moose代码中编写
sub-new
,这样做是错误的。如果你正在使用Moose,你不需要自己编写构造函数(
sub-new
)。这就是驼鹿的作用。代码中也有拼写错误。请将您的准确代码复制到问题中,并确保它事先运行。你真的试过吗?你不仅不需要在Moose代码中编写
sub-new
,这样做是错误的。如果你正在使用Moose,你不需要自己编写构造函数(
sub-new
)。这就是驼鹿的作用。代码中也有拼写错误。请将您的准确代码复制到问题中,并确保它事先运行。你真的试过这个吗?你不仅不需要在驼鹿代码中编写
sub-new
,这样做是错误的。根据你的调查,我对自动加载模块进行了一些搜索,我发现类似“使用自动使用‘Carp’=>qw(Carp-croak);”这样的东西可能会解决你所担心的问题。这能解决这个问题并且没有问题吗?如果是这样的话,为什么我们不总是使用“autouse”来延迟加载模块,直到真正需要或使用它呢?我在cpan上找到了这个模块,并很容易地使用它,比如
use later'MyApp::Config'唯一的缺点是,它将子自动加载注入包和调用方。根据您的调查,我对自动加载模块进行了一些搜索,发现类似“使用自动使用‘Carp’=>qw(Carp croak);”的内容可能会解决您所担心的问题。这能解决这个问题并且没有问题吗?如果是这样的话,为什么我们不总是使用“autouse”来延迟加载模块,直到真正需要或使用它呢?我在cpan上找到了这个模块,并很容易地使用它,比如
use later'MyApp::Config'唯一的缺点是,它将子自动加载注入包和调用方。根据您的调查,我对自动加载模块进行了一些搜索,发现类似“使用自动使用‘Carp’=>qw(Carp croak);”的内容可能会解决您所担心的问题。这能解决这个问题并且没有问题吗?如果是这样的话,为什么我们不总是使用“autouse”来延迟加载模块,直到真正需要或使用它呢?我在cpan上找到了这个模块,并很容易地使用它,比如
use later'MyApp::Config'唯一的缺点是,它会将sub AUTOLOAD注入包和调用方