免费注册 查看新帖 |

Chinaunix

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

求教问题:在perl模块最后加上“1;” 还是会报错“did not return a true value” [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-05-03 19:55 |只看该作者 |倒序浏览
本帖最后由 mmbh 于 2011-05-04 09:10 编辑

自己写的两个模块,末尾都加上了“1;”,在Main.pl中调用模块函数时一个正常但另一个报错:

Module 1:
  1. package Device::Serial;

  2. use strict;
  3. use warnings;
  4. use Win32::SerialPort;

  5. require Exporter;
  6. our @EXPORT = qw();
  7. our @EXPORT_OK = qw();
  8. sub1
  9. sub2
  10. ...
  11. 1;
复制代码
Module 2:
  1. package Init::ParseCfg;

  2. use strict;
  3. use warnings;
  4. use Config::IniFiles;

  5. require Exporter;
  6. our @EXPORT = qw();
  7. our @EXPORT_OK = qw();
  8. sub1
  9. sub2
  10. ...
  11. 1;
复制代码
Main.pl:

  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use Carp;

  5. use FindBin qw($Bin);
  6. use lib "$Bin";

  7. use Device::Serial;
  8. use Init::ParseCfg;
复制代码
编译时报“Init/ParseCfg.pm did not return a true value at Main.pl line 10,
            BEGIN failed--compilation aborted at Main.pl line 10."

环境是winxp 32bit, ActivePerl 5.10.1

奇怪的是Serial模块用起来就正常,第二个不管怎么弄都要报这个错。@INC路径应该没有问题啊。请这里的高手帮忙看看是哪里出错了,万分感谢

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
2 [报告]
发表于 2011-05-03 20:15 |只看该作者
InitParseCfg.pm did not return a true value at Main.pl line 10,

package Init::ParseCfg;

论坛徽章:
0
3 [报告]
发表于 2011-05-03 20:49 |只看该作者
本帖最后由 mmbh 于 2011-05-03 20:54 编辑

回复 2# zhlong8


感谢LS的回复。
我知道是这个模块的错误,Perl的提示信息很清楚,只是不知道为什么会出现这个错误而另一个模块没有出错。
请问是出现了命名冲突吗?

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
4 [报告]
发表于 2011-05-03 21:40 |只看该作者
回复  zhlong8


感谢LS的回复。
我知道是这个模块的错误,Perl的提示信息很清楚,只是不知道为什么 ...
mmbh 发表于 2011-05-03 20:49



    你的 Init 文件夹下有 ParseCfg.pm 这个文件吗?我是这个意思。两种名字不同

论坛徽章:
0
5 [报告]
发表于 2011-05-03 21:49 |只看该作者
回复 4# zhlong8


    谢谢你的热心回复。

    我的Main.pl所在文件夹里有一个子文件夹“Init”,里面只有一个文件“ParseCfg.pm”,Device模块也是如此。
    开始我以为是路径的问题,但是改了文件夹和pm的名字,甚至把ParseCfg.pm和Main.pl放在同一个文件夹里,直接用"use ParseCfg"和"require   ParseCfg.pm"都试过了,还是不行啊  看来自己是钻牛角尖了呢.

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
6 [报告]
发表于 2011-05-03 21:52 |只看该作者
本帖最后由 zhlong8 于 2011-05-03 21:53 编辑
回复  zhlong8


    谢谢你的热心回复。

    我的Main.pl所在文件夹里有一个子文件夹“Init ...
mmbh 发表于 2011-05-03 21:49



    解决了还是没解决?不行把那个源文件发上来

    还有你这样用 Exporter 是没法导入函数的吧

论坛徽章:
1
未羊
日期:2014-09-08 22:47:27
7 [报告]
发表于 2011-05-03 21:57 |只看该作者
  1. BEGIN {
  2.     use FindBin qw($Bin);
  3.     unshift @INC,$Bin;
  4. }
复制代码
也许改成这样就行了。use lib 是在编译阶段执行的,而不是在运行时执行。

论坛徽章:
0
8 [报告]
发表于 2011-05-03 21:58 |只看该作者
回复 6# zhlong8


    明天我去公司再看看. 搞定了再来结贴哈.
   我这样用Export就是不要默认导入任何sub,调用时必须用完整的包名称.
   BTW, 这和模块中sub的返回值木有关系吧?

论坛徽章:
0
9 [报告]
发表于 2011-05-03 22:02 |只看该作者
本帖最后由 mmbh 于 2011-05-03 22:05 编辑

回复 7# wxlfh


    谢谢回复.

    但是Device::Serial又是可行的啊? use就相当于BEGIN{require和import}的吧,这个不是应该编译时就加载的吗?

    明天去try一try,空了一定得好好看看羊驼书啊.

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
10 [报告]
发表于 2011-05-03 22:21 |只看该作者
回复  wxlfh


    谢谢回复.

    但是Device::Serial又是可行的啊? use就相当于BEGIN{require和imp ...
mmbh 发表于 2011-05-03 22:02



    问题不在 main.pl 你两个模块里面都是 require 'Exporter'; 应该用 use base 'Exporter';

   如果你要用全名那还要 Exporter 做什么……
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP