Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 无法将参数从ksh脚本传递到.pm文件中的子例程_Perl - Fatal编程技术网

Perl 无法将参数从ksh脚本传递到.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 {

我有一个名为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 { 
        $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”