|
看了一段时间perl相关的资料,觉得对::和->的区别不理解,也可能就根本理解错误。请高手帮忙指正:
我写了两个文件做实验,一个是common.pm,一个是test.pl
[test.pl]
#!/usr/bin/perl -w
BEGIN{ push @INC,'/linux/src/COMMON'};
use strict;
require common;
my $result=common->internal_days("20080911","20021011");
my $day=common->month_days("20080911");
print "this is $result\n";
print "this is $day\n";
[common.pm]
#!/usr/bin/perl -w
use strict;
package common;
sub internal_days
{
# define all the used parameters
my($year1,$month1,$day1,$year2,$month2,$day2,$day_number,$different_day);
if ($_[1]>$_[2])
{
$year1=substr($_[1],0,4);
$month1=substr($_[1],4,2);
$day1=substr($_[1],6,2);
$year2=substr($_[2],0,4);
$month2=substr($_[2],4,2);
$day2=substr($_[2],6,2);
}
else
{
$year2=substr($_[1],0,4);
$month2=substr($_[1],4,2);
$day2=substr($_[1],6,2);
$year1=substr($_[2],0,4);
$month1=substr($_[2],4,2);
$day1=substr($_[2],6,2);
}
$day_number=$day1-$day2;
while($month1!=$month2 or $year1!=$year2)
{
$month1-=1;
if($month1==0)
{
$month1=12;
$year1-=1;
}
if($month1=~[1,3,5,7,8,10,12])
{
$different_day=31;
}
else
{
if($month1==2)
{
if(${year1}%4==0)
{
if(${year1}%400==0)
{
$different_day=29;
}
elsif(${year1}%100==0)
{
$different_day=28;
}
}
else
{
$different_day=29;
}
}
else
{
$different_day=30;
}
}
$day_number=$day_number+$different_day;
}
return $day_number;
}
sub month_days
{
my($year,$month,$day);
$year=substr($_[1],0,4);
$month=substr($_[1],4,2);
if($month=~[1,3,5,7,8,10,12])
{
$day=31;
}
else
{
if($month==2)
{
if(${year}%4==0)
{
if(${year}%400==0)
{
$day=29;
}
elsif(${year}%100==0)
{
$day=28;
}
}
else
{
$day=29;
}
}
else
{
$day=30;
}
}
return $day;
}
1;
如果test.pl中使用common->internal_days调用,能够正常返回结果,
如果改成common::internal_days,则报错说
Use of uninitialized value $month2 in numeric ne (!=) at /linux/src/COMMON/common.pm line 71
::开始我一直以为是只能使用package中的变量,看起一些资料说可以进行subroute的调用,可是换掉就报错了,不知道是我哪里使用不正确? 谢谢了!
|