Perl 无法将参数从ksh脚本传递到.pm文件中的子例程
我有一个名为Util的.pm文件。以及返回下一个日期的子例程Perl 无法将参数从ksh脚本传递到.pm文件中的子例程,perl,Perl,我有一个名为Util的.pm文件。以及返回下一个日期的子例程 sub getNextDate { $inputDate = @_[1]; if ($inputDate != "") { ($year,$mon,$day) = split("-",$inputDate); $mon = $mon - 1; $dtToday = timelocal(0,0,0,$day,$mon,$year); } else {
sub getNextDate {
$inputDate = @_[1];
if ($inputDate != "") {
($year,$mon,$day) = split("-",$inputDate);
$mon = $mon - 1;
$dtToday = timelocal(0,0,0,$day,$mon,$year);
} else {
$dtToday = time;
}
$nextDate = $dtToday + 86400;
$nextMonth = ( localtime( $nextDate)->mon ) + 1;
$nextYear = ( localtime( $nextDate)->year ) + 1900;
$nextDay = localtime( $nextDate)->mday;
if($nextMonth <= 9) {
$nextMonth = '0'.$nextMonth;
}
if($nextDay <= 9) { $nextDay = '0'.$nextDay ; }
return $nextYear . "-" . $nextMonth . "-" . $nextDay;
}
它不工作..我得到的输出基于当前日期,而不是我通过的日期
如果我直接保留日期而不是变量,我将得到正确的输出<代码>perl-multil-e'print Util::getNextDate(“2013-02-25”);'代码>
但是我想使用$startDate
而不是2013-02-25
…请帮助您使用$ENV{“startDate”}
从Perl访问环境变量
不过,将其作为$ARGV[0]
传递可能更有用
startDate=2013-02-25
perl -MUtil -e 'print Util::getNextDate($ARGV[0]);' "$startDate" |
tee "$result"
您可以使用$ENV{“startDate”}
从Perl访问环境变量
不过,将其作为$ARGV[0]
传递可能更有用
startDate=2013-02-25
perl -MUtil -e 'print Util::getNextDate($ARGV[0]);' "$startDate" |
tee "$result"
为此,您应该使用。自9.5版以来,它一直是核心Perl模块,因此不需要安装
use strict;
use warnings;
use Time::Piece;
use Time::Seconds 'ONE_DAY';
sub getNextDate {
my $date = @_ ? Time::Piece->strptime($_[0], '%Y-%m-%d') : localtime;
return ($date + ONE_DAY)->strftime('%Y-%m-%d');
}
print getNextDate('2012-12-31'), "\n";
print getNextDate, "\n";
输出
2013-01-01
2013-10-21
为此,您应该使用。自9.5版以来,它一直是核心Perl模块,因此不需要安装
use strict;
use warnings;
use Time::Piece;
use Time::Seconds 'ONE_DAY';
sub getNextDate {
my $date = @_ ? Time::Piece->strptime($_[0], '%Y-%m-%d') : localtime;
return ($date + ONE_DAY)->strftime('%Y-%m-%d');
}
print getNextDate('2012-12-31'), "\n";
print getNextDate, "\n";
输出
2013-01-01
2013-10-21
这是
正如我在这里告诉你们的,这不是perl的问题,而是ksh的问题,在调用perl时,引号中的变量插值是错误的,swap和
startDate='2013-02-25';
perl -MUtil -e "print Util::getNextDate('$startDate');"
目前,您只将变量名作为字符串传递。这是
正如我在这里告诉你们的,这不是perl的问题,而是ksh的问题,在调用perl时,引号中的变量插值是错误的,swap和
startDate='2013-02-25';
perl -MUtil -e "print Util::getNextDate('$startDate');"
目前,您仅以字符串形式传递变量名。您可以使用
cat“$result”
来显示文件,或者使用。|T形三通“$result”
以同时保存和显示它。。。。提供的$result
包含有效的文件名;您没有向我们显示您正在将其设置为什么以及如何设置。您应该尝试缩进,这将使您的生活更轻松。您应该知道,如果($inputDate!=“”)
不按您的想法操作<代码>=是数值不等式运算符,它将其两个参数都转换为数字。您似乎没有使用使用警告
,否则会收到有关此的警告。您可能应该使用if(defined$inputDate)
。由于DST,您的代码将失败。并非所有的日子都有86400秒。getNextDate有时会返回当前日期。您可以使用cat“$result”
显示文件,也可以使用…|T形三通“$result”
以同时保存和显示它。。。。提供的$result
包含有效的文件名;您没有向我们显示您正在将其设置为什么以及如何设置。您应该尝试缩进,这将使您的生活更轻松。您应该知道,如果($inputDate!=“”)
不按您的想法操作<代码>=是数值不等式运算符,它将其两个参数都转换为数字。您似乎没有使用使用警告
,否则会收到有关此的警告。您可能应该使用if(defined$inputDate)
。由于DST,您的代码将失败。并非所有的日子都有86400秒。getNextDate有时会返回当前日期。代码生成几乎总是一个糟糕的解决方案。在这种情况下,这不是一个真正的问题,但我仍然建议将日期作为参数或env变量传递。perl-multil-le'print Util::getNextDate($ARGV[0]);'“$startDate”
代码生成几乎总是一个糟糕的解决方案。在这种情况下,这不是一个真正的问题,但我仍然建议将日期作为参数或env变量传递。perl-multil-le'print Util::getNextDate($ARGV[0]);'“$startDate”