LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1375|回复: 8

菜鸟问题:配置一个cgi程序时报错,perl写的

[复制链接]
发表于 2007-1-30 15:35:33 | 显示全部楼层 |阅读模式
运行程序报错如下:
[root@zhuw cgi-bin]# perl timesheet.cgi
Can't locate Time/DayOfWeek.pm in @INC (@INC contains: /usr/lib/perl5/5.8.0/i386-linux-thread-multi /usr/lib/perl5/5.8.0 /usr/lib/perl5/site_perl/5.8.0/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.0 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.0/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.0 /usr/lib/perl5/vendor_perl /usr/lib/perl5/5.8.0/i386-linux-thread-multi /usr/lib/perl5/5.8.0 .) at timesheet.cgi line 6.
BEGIN failed--compilation aborted at timesheet.cgi line 6.
[root@zhuw cgi-bin]#

timesheet.cgi源程序前几行如下:

[root@zhuw cgi-bin]# more timesheet.cgi
#! /usr/local/bin/perl

use strict;
use DBI;
use Digest::MD5 qw(md5 md5_hex md5_base64);
use Time:: DayOfWeek qw(:all);
use Time::Elapse;
use Date::Range;
use Date::Simple;


Time::Elapse->lapse(my $ScriptTimer);

## Debug and version vars
my $Version = '0.0.1';
my $DebugLevel = 0;     # Level 0-5, 5 being the most detailed.  0=off
my $DebugMode  = 1;     # 0 = TXT, 1 = HTML
my @DebugStack;

## Used to toggle between a dev run and a production run
# my $devToggle = 'timesheet_dev';
my $devToggle = 'timesheet';


想搞定这个问题,一时找不到方向,谢了先。
发表于 2007-1-30 16:04:40 | 显示全部楼层
第六行的 "Time:: DayOfWeek" 中多了个空格?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-1-30 16:51:49 | 显示全部楼层
不是,如果连在一块,会是一个表情符号,所以我分开了。其实在代码里面是连在一起的 。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-1-30 16:52:00 | 显示全部楼层
不是,如果连在一块,会是一个表情符号,所以我分开了。其实在代码里面是连在一起的 。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-2-1 10:24:55 | 显示全部楼层
求救阿 求救。!!!
回复 支持 反对

使用道具 举报

发表于 2007-2-1 14:08:50 | 显示全部楼层
1.  根据出错信息, 是找不到对应的库. 我试了一下, 自己的机器上 "Time:: DayOfWeek, Time::Elapse, Date::Range, Date::Simple" 四个库都没有.
http://www.cpan.org/modules/by-module/目录下的Date 和 Time 子目录下分别下载DayOfWeek, Elapse, Range, Simple相关的文件, 将压缩包中对应的文件放到 /usr/lib/perl5/5.8.0 目录下相关的 Date, Time 子目录下 (如 Date不存在, 则先建立Date目录).  则应该可以正常运行了.

2.  仅从你的测试程序看, 除了定义了一些变量外, 只有一句 "Time::Elapse->lapse(my $ScriptTimer);" 用到了Time目录下的Elapse.pm 文件.  此外的几个库文件(Time/DayOfWeek.pm 等) 都没有用到. 所以对应的引用似乎都是不需要的吧?
回复 支持 反对

使用道具 举报

发表于 2007-2-1 14:09:39 | 显示全部楼层
Anyway, 我对Perl不熟悉, 很多也只是猜测而已.  希望对你有点帮助.  ^_^
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-2-1 22:34:39 | 显示全部楼层
Post by chunchengfh
将压缩包中对应的文件放到 /usr/lib/perl5/5.8.0 目录下相关的 Date, Time 子目录下 (如 Date不存在, 则先建立Date目录).  则应该可以正常运行了.

2.  仅从你的测试程序看, 除了定义了一些变量外, 只有一句 "Time::Elapse->lapse(my $ScriptTimer);" 用到了Time目录下的Elapse.pm 文件.  此外的几个库文件(Time/DayOfWeek.pm 等) 都没有用到. 所以对应的引用似乎都是不需要的吧?



谢谢楼上的建议,让我豁然开朗,开始用命令perl -MCPAN -e 'install TimeayOfWeek'下不下来。用你的方法把模块全下下来了。
然后我没有放到你说的那些子目录下,因为这些模块需要编译,于是我编译了一把,那些报错就没有了。
这个bug解决了。调试了一遍又有新的。如下:
[root@zhuw cgi-bin]# perl -w timesheet.cgi
"my" variable $sth masks earlier declaration in same scope at timesheet.cgi line 182.
Variable "%PersonalCatagoryPrioHash" will not stay shared at timesheet.cgi line 231.
Variable "%AllValidCatagoryHash" will not stay shared at timesheet.cgi line 231.
Useless use of sort in void context at timesheet.cgi line 1182.
Useless use of sort in void context at timesheet.cgi line 1191.
Use of uninitialized value in string eq at timesheet.cgi line 3416.
Use of uninitialized value in string eq at timesheet.cgi line 3416.
Undefined subroutine &main::return_error called at timesheet.cgi line 3419.
[root@zhuw cgi-bin]#

翻译成中文我也不知道少什么了。指点则个。:)
回复 支持 反对

使用道具 举报

发表于 2007-2-2 14:25:47 | 显示全部楼层
语法错误一堆 的意思
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表