Perl 包括pm模块中的文件

Perl 包括pm模块中的文件,perl,include,cgi,fastcgi,perl-module,Perl,Include,Cgi,Fastcgi,Perl Module,我对Perl/Fastcgi完全陌生 我有一些pm模块,需要添加很多脚本,随着时间的推移,它会不断增长。因此,我需要一个结构,使管理更容易 所以,我想在某种目录结构中创建文件,我可以包括这些文件。我想我包括的文件将是一样的,如果文本写在文件中,我做的包括 我试过“做”、“用”和“要求”。我想要包含的实际文件位于Perl正在查找的目录之一中。(使用perl-V验证) 我试过内外开始{} 我该怎么做?是否可能在pm文件中包含pm文件?它必须是pm文件,我包括或可以是任何扩展名 我试过几种方法,下面是

我对Perl/Fastcgi完全陌生

我有一些pm模块,需要添加很多脚本,随着时间的推移,它会不断增长。因此,我需要一个结构,使管理更容易

所以,我想在某种目录结构中创建文件,我可以包括这些文件。我想我包括的文件将是一样的,如果文本写在文件中,我做的包括

我试过“做”、“用”和“要求”。我想要包含的实际文件位于Perl正在查找的目录之一中。(使用perl-V验证)

我试过内外开始{}

我该怎么做?是否可能在pm文件中包含pm文件?它必须是pm文件,我包括或可以是任何扩展名

我试过几种方法,下面是我最后一次尝试

Config.pm

package Kernel::Config;

sub Load {

#other activities

require 'severalnines.pm';

#other activities

}
1;
下午几点

# Filter Queues

$Self->{TicketAcl}->{'ACL-hide-queues'} = {
                Properties => {
},
                PossibleNot => {Ticket => { Queue =>
                    ['[RegExp]^*'] },

  },
};
1;
我没有在Apache的错误日志中发现任何与此相关的错误。尽管如此,代码并不像我把它放在Config.pm文件中那样被识别

我不打算开始编程很多,只是做一些管理在第三方应用程序。尽管如此,我还是四处搜索,试图了解它是如何处理包含文件的。severlnines.pm是否被认为是一个perl模块,我是否需要使用h2xs或类似的程序来“创建”该模块(告诉你,完全是新手

提前谢谢

if (    'I want the files that I include will be exactly like if the text were written in the file where I do the include.' 
     && 'have to add a lot of scripts and over time it will grow and grow') {
    warn 'This is probably a bad idea because you are not creating any kind of abstraction!';
}
看看,它可能会给你一个很好的解决方案


看看,它可能会给你一个很好的解决方案

我通常创建自己的模块前缀——以项目或工作地点命名。例如,您可以使用名为
Mu::Foo
Mu::Bar
的模块将所有内容放在Mu下。使用多个模块(不要试图将所有内容都保存在一个文件中),并使用
*.pm
后缀命名模块

然后,如果
Mu
目录与您的程序位于同一目录中,您只需执行以下操作:

use Mu::Foo;
use Mu::Bar;
如果它们位于另一个目录中,您可以执行以下操作:

use lib qw(/path/to/other/directory);
use Mu::Foo;
use Mu::Bar;
是否可能在pm文件中包含pm文件

当然可以

所以,我想在某种目录结构中创建文件,我可以包括这些文件。我希望我包含的文件将非常像我包含的文件中写的文本。

这是个坏主意。您最好使用包机制。也就是说,将每个模块声明为单独的包名。否则,您的模块中将包含一个变量或函数,脚本将覆盖该变量或函数,而您永远也不会知道它

在Perl中,您可以通过在模块前面加上模块名来引用模块中的变量。(例如,
$File::Find::Name
是找到的文件的名称。这不会污染您的命名空间

如果您确实希望模块的函数和变量位于命名空间中,请查看中的列表变量。这是您希望导入模块命名空间的所有变量和函数的列表。但是,这不是自动的,您必须在
use
语句旁边列出它们。这样,您就更有可能知道about。使用Exporter并不太困难。在模块中,您可以输入:

package Mu::Foo;
use Exporter qw(import);
our EXPORT_OK = qw(convert $fundge @ribitz);
use Mu::Foo qw(convert $fundge @ribitz);
然后,在您的程序中,您将:

package Mu::Foo;
use Exporter qw(import);
our EXPORT_OK = qw(convert $fundge @ribitz);
use Mu::Foo qw(convert $fundge @ribitz);
现在,您可以访问
convert
$fundge
@ribitz
,就好像它们是主程序的一部分一样。但是,您现在已经记录了您正在从
Mu::Foo
中提取这些子例程和变量


(如果你认为这很复杂,很高兴我没有告诉你你真的应该在你的模块中使用面向对象的方法。这是最好的方法。)

我通常创建自己的模块前缀——以项目或我工作的地方命名。例如,您可以将所有模块放在Mu下,并使用名为
Mu::Foo
Mu::Bar
的模块。使用多个模块(不要试图将所有模块都保存在一个文件中),并使用
*.pm
后缀命名模块

然后,如果
Mu
目录与您的程序位于同一目录中,您只需执行以下操作:

use Mu::Foo;
use Mu::Bar;
如果它们位于另一个目录中,您可以执行以下操作:

use lib qw(/path/to/other/directory);
use Mu::Foo;
use Mu::Bar;
是否可能在pm文件中包含pm文件

当然可以

因此,我想在某种目录结构中创建文件,我可以包含这些文件。我希望我包含的文件将非常类似于文本写入我包含的文件。

这不是一个好主意。最好使用包机制。也就是说,将每个模块声明为一个单独的包名。否则,您的模块中将包含一个变量或函数,脚本将覆盖该变量或函数,您永远也不会知道它

在Perl中,您可以通过在模块前面加上模块名来引用模块中的变量。(例如,
$File::Find::name
是找到的文件名。这不会污染您的命名空间

如果您确实希望模块的函数和变量位于命名空间中,请查看中的列表变量。这是您希望导入模块命名空间的所有变量和函数的列表。但是,这不是自动的,您必须在
use
语句旁边列出它们。这样,您就更有可能知道about。使用Exporter并不太困难。在模块中,您可以输入:

package Mu::Foo;
use Exporter qw(import);
our EXPORT_OK = qw(convert $fundge @ribitz);
use Mu::Foo qw(convert $fundge @ribitz);
然后,在您的程序中,您将:

package Mu::Foo;
use Exporter qw(import);
our EXPORT_OK = qw(convert $fundge @ribitz);
use Mu::Foo qw(convert $fundge @ribitz);
现在,您可以访问
convert
$fundge
@ribitz
,就好像它们是主程序的一部分一样。但是,您现在已经记录了您正在从
Mu::Foo
中提取这些子例程和变量

(如果你认为这很复杂,很高兴我没有告诉你你真的应该在你的模块中使用面向对象的方法。这确实是最好的方法。)

你试过
r吗