【发布时间】:2013-09-02 22:17:58
【问题描述】:
我有一个名为genbank.pm 的Perl 模块文件,它有一个子程序new;这个 Perl 模块没有使用Exporter,也没有定义@EXPORT 或@EXPORT_OK。在同一个目录下我有一个名为test.pl的Perl文件,test.pl的代码是:
require 'genbank.pm';
use strict;
our $result = genbank::new();
当我使用 Komodo 运行它时,它会报告:
Undefined subroutine &genbank::new called at /home/mrs/scripts/test.pl line 3;
在我更改代码后
our $result = genbank::new();
到
our $result = genbank->new();
它说:
Can't locate object method "new" via package "genbank"(perhaps you forgot to load "genbank"?) at /home/mrs/scripts/test.pl line 3.
【问题讨论】:
-
当您使用
use genbank;而不是require ...时会发生什么?在genbank.pm里面,顶部附近有package genbank;声明吗? -
不,genbank.pm 中的包声明是“package MRS::Scripts::genbank”,它是文件 genbank.pm 中唯一的包声明。 .那么,下一步是什么?
-
从“require ...”更改为“use ...”没有区别。
-
在我将包声明从“package MRS::Scripts::genbank”更改为简单的“package genbank”之后,调用有效。所以,我的问题是,我该怎么做才能使调用成功,另一方面将包声明保留为“package MRS::Scripts::genbank”?
标签: perl require perl-module subroutine