[以解决][求助]用Exporter的 .pm 如果想导出所有函数,有简单的方法吗?

[以解决][求助]用Exporter的 .pm 如果想导出所有函数,有简单的方法吗?

要写个中小型程序,想把几个方面的函数分文件存放.
还没学完对象,只好用Exporter. 但我基本上需要将整个pm的函数都导出,如果一个个写到@EXPORT中,也太麻烦了.
有简单的方法吗?

开头用package main;



QUOTE:
原帖由 galaxy001 于 2009-1-12 11:45 发表
要写个中小型程序,想把几个方面的函数分文件存放.
还没学完对象,只好用Exporter. 但我基本上需要将整个pm的函数都导出,如果一个个写到@EXPORT中,也太麻烦了.
有简单的方法吗?

要看你的 .pm 是怎么写的了。


[Copy to clipboard] [ - ]
CODE:
package Syn::Readin;
use strict;
our $VERSION   = v1.0.0;
sub read_gene_len($) {
        my $file=$_[0];
        die "FATAL: Need a SCALAR reference !\n" if ref($file) ne 'SCALAR';
        #warn $$file;
        my (%dat,$chr,$len);
        open FILE,'<',$$file or die "Error: $!\n";
        while (<FILE>) {
                chomp;
                ($chr,$len)=split /\t/;
                $dat{$chr}=$len;
        }
        close FILE;
        return [undef,\%dat];
}
sub value_gene_len($) {
        my $dat=$_[0];
        return $$dat[1];
}
sub specie_gene_len($) {
        my $dat=$_[0];
        return $$dat[0];
}

比如这样的. 我打算先把扩充的余地留着.
这么问吧, 如何把Syn::Readin::的东西,都放到main::中?
最好只放函数.

像Syn::Readin::的,是叫namespace吗?


QUOTE:
原帖由 galaxy001 于 2009-1-12 14:06 发表
这么问吧, 如何把Syn::Readin::的东西,都放到main::中?
最好只放函数.

你自己实现 import 函数然后自己调用(或使用 use 时 Perl 自动调用),或者使用 Exporter 提供的默认 import。

当然,自己写个自动 exporter 所有函数的模块也是可能的;也许 CPAN 上已有这种模块了,搜索下。

QUOTE:
像Syn::Readin::的,是叫namespace吗?

嗯。
直接删除 package 语句即可。
或者写成 package main 也行。


QUOTE:
原帖由 flw 于 2009-1-12 15:47 发表
直接删除 package 语句即可。
或者写成 package main 也行。

cpan 上有些模块,例如 ExportAbove, Exporter::NoWork 等,都可以自动 export 函数。


QUOTE:
原帖由 flw 于 2009-1-12 15:47 发表
直接删除 package 语句即可。
或者写成 package main 也行。

这也是个方法,虽然不太可取。


QUOTE:
原帖由 MMMIX 于 2009-1-12 15:58 发表

这也是个方法,虽然不太可取。

看需求了。
我猜,对楼主来说也许是最合理的办法。


QUOTE:
原帖由 flw 于 2009-1-12 15:59 发表

看需求了。
我猜,对楼主来说也许是最合理的办法。

可能。