2013-12-11 7 views
1

во время выполнения сценария я получаю ниже ошибки:«Не удается найти DateTime.pm» ошибка в Perl

Can't locate DateTime.pm in @INC (@INC contains: /usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl /usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/ve 

мой код:

#!/usr/bin/perl 

use DBI; 
use POSIX qw(strftime); 
use DateTime; 

my $dbh = DBI->connect(
    "dbi:mysql:dbname=agilefant-test", 
    "agilefant-test", 
    "Agilefant-test", 
    { RaiseError => 1 }, 
) or die $DBI::errstr; 

my $datestring = strftime "%Y %m %d %X", gmtime; 
my $fourteen_days_from_now = $datestring->add(days =>14); 

my $sth = $dbh->prepare("Insert into backlogs (backlogtype, id, description, name, backlogSize, baselineLoad, endDate, readonlyToken, startDate, rank, status, parent_id) 
values ('Project' , '200', 'Sanchit Testing', 'Maintenance agilefant', NULL, NULL, ('$fourteen_days_from_now'), NULL, ('$datestring'), NULL, NULL, '34')"); 
$sth->execute() or die $DBI::errstr; 
$sth->finish(); 

Как из предыдущих вопросов он отличается сог я не могу обновить мою систему, так как у меня нет прав, а также, и я хочу установить конечную дату, как через 14 дней с текущей даты. Так что нужна помощь для этого.

+1

Таким образом, [установить] (http://www.cpan.org/modules/INSTALL.html) это. (Возможно, вы захотите [обновить] (http://perlbrew.pl/) с Perl 5.8 до того, который поддерживается, пока вы на нем. Perl 5.18 - это стабильная версия, у вас 5 основных версий.) – Quentin

+0

любой другой вариант, потому что я не могу его обновить –

+0

обновление perl не даст вам DateTime; DateTime не входит в ядро ​​perl, вы должны установить его из CPAN (или любой другой системы упаковки, которую предоставляет os, которая, вероятно, будет доступна) – ysth

ответ

1

Если вы используете систему, к которой вы не можете применить обновления, вы должны рассмотреть perlbrew. Он обрабатывает все администрирование perl локально для текущего пользователя. т. Е. Вам не нужны права администратора.

0

Я думаю, что лучшим решением является установка отсутствующего модуля.

Если вы не можете установить его, в соответствии с вашим кодом, возможно, вам просто нужно получить строку даты через 14 дней после сегодняшнего дня? Вы можете вычислить его самим с .

просто попробуйте это:

perl -MPOSIX -e '$t = strftime "%Y%m%d", localtime(time() + 14 * 24 * 3600); print $t' 
+0

с предоставленным вами решением. Я получаю только одну дату, если сегодня 11-12, тогда i получить 12-12 .... я хочу 14 дней после ..... –

+0

24 * 3600 * 14? – akawhy

+0

Не все дни имеют 24 * 3600 секунд. В дополнение к дате даты через 14 дней по вашему желанию, ваш код может дать дату через 13 дней, и она может дать дату через 15 дней. – ikegami

1

Вы можете использовать Time::Piece и Time::Seconds добавить дней к дате, и он также имеет POSIX strftime. Кроме того, они являются основными модулями в Perl, поскольку v5.9.5.

use strict; 
use warnings; 
use Time::Piece; 
use Time::Seconds; 

my $t = localtime; 
$t += ONE_DAY * 14; 
print $t->strftime('%Y %m %d %X'); 
+0

@ysth, это действительно работает, потому что Time :: Piece переопределяет 'localtime', чтобы вернуть объект с перегруженными операторами. – ikegami

+0

@ikegami Вы правы, видимо, больше, что происходит под капотом, чем кажется на первый взгляд. Есть ли хороший тест для математики на дату, чтобы попробовать это? – TLP

+0

ах, неважно, тогда. ssorry – ysth

Смежные вопросы