我在perl中有一个共享模块.主程序需要两个文件,第一个是共享文件(让我们称之为'X'),第二个是'包'文件.文件'X'也使用'require'包含在'package'文件中.当我编译这个程序时,它给我以下错误:
Undefined subroutine &main::trim called at testing.pl line 8.
Run Code Online (Sandbox Code Playgroud)
我的理解是perl找不到trim()模块.如果我不包含包文件,那么这将运行没有任何问题.
任何人都可以解释这个问题吗?
这些是我的代码:
主程序:testing.pl
#!/usr/bin/perl -w
use strict;
use postgres;
require "shared.pl";
trim("als");
Run Code Online (Sandbox Code Playgroud)
包文件:postgres.pm
#!/usr/bin/perl
package postgres;
use strict;
use DBI;
require "shared.pl";
1;
Run Code Online (Sandbox Code Playgroud)
共享文件:shared.pl
#!/usr/bin/perl
# =============
# shared module
# =============
use strict;
sub trim($)
{
}
1;
Run Code Online (Sandbox Code Playgroud)
如果模块不使用package,则需要do代替require.请参阅库文件和模块之间的区别是什么?.
do "shared.pl" or die $@;
Run Code Online (Sandbox Code Playgroud)
你真的应该创建一个合适的模块,一个带有package语句.
package Shared;
use strict;
use warnings;
our @EXPORT = qw( trim );
use Exporter qw( import );
sub trim { ... }
1;
Run Code Online (Sandbox Code Playgroud)
命名文件Shared.pm并使用它加载它use Shared;.