免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2285 | 回复: 3
打印 上一主题 下一主题

写模块遇到的问题? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-01-05 18:33 |只看该作者 |倒序浏览
因为程序需要后期维护,所以我所有的代码前都会有use strict和use warnings来规范编码;
但是在模块中似乎不能加。

如果我写成这样:
use strict;
use warnings;
package TestPM;
require Exporter;
@ISA = qw(Exporter);
@EXPORT = qw(foo);

sub foo
{
        my $var1 = shift;
        print $var1;
}

使用时就会报错:
Global symbol "@ISA" requires explicit package name at TestPM.pm line 6.
Global symbol "@EXPORT" requires explicit package name at TestPM.pm line 7.
Compilation failed in require at ./main.pl line 5.
BEGIN failed--compilation aborted at ./main.pl line 5.

去掉头两行就好了。

不知道如何给模块加
use strict;
use warnings;
来规范编码?


另外直接写成.pl文件用require导入和写成.pm模块文件用use导入有什么区别吗?

论坛徽章:
0
2 [报告]
发表于 2006-01-05 19:25 |只看该作者
报错的那2个标量要用our来声明。
用our声明了变量后,就意味着在你定义的package里生成了相应的符号,这个符号可被export到其他包的符号空间。例如,use Sample qw/:sth/;这样将Sample包的sth这个符号组import 进当前包的符号空间。
而require引入的.pl脚本如果没有申明成package的话,它不会产生独立的符号空间,它里面的所有变量及方法被强制import进主包的符号空间。
如果不导入任何符号的话,use与require意义差不多,也就是说:
require "Sample.pl"; 等同于:
use Sample qw();

[ 本帖最后由 兰花仙子 于 2006-1-5 20:26 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2006-01-05 21:30 |只看该作者
require Exporter;
@ISA = qw(Exporter);
@EXPORT = qw(foo);

可以这么写:
use base 'Expoter';
use vars qw/@EXPORT/;
@EXPORT = qw(foo);

用 use vars qw//; 来搞

论坛徽章:
0
4 [报告]
发表于 2006-01-09 10:57 |只看该作者
用 our 吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP