Pergunta

Solaris 10 não parece gostar muito de mim. Eu estou tentando executar um script simples para aceitar data e retorno época dessa data:

#!/usr/bin/perl -w
use strict;
use Time::ParseDate;

my $date1 = "Mon Mar 27 05:54:08 CDT 2009";

#Convert to seconds since start of epoch
my $time1 = parsedate($date1);
print $time1;

funciona perfeitamente bem na caixa RHEL, mas se ferra no Solaris (ambos têm 5.8.8 Perl), dando a seguinte mensagem de erro.

Não é possível localizar Data / Parse.pm em @INC (@INC contém: /usr/perl5/5.8.4/lib/sun4-solaris-64int /usr/perl5/5.8.4/lib / usr / perl5 /site_perl/5.8.4/sun4-solaris-64int /usr/perl5/site_perl/5.8.4 / usr / perl5 / site_perl /usr/perl5/vendor_perl/5.8.4/sun4-solaris-64int / usr / perl5 / vendor_perl /5.8.4 / usr / perl5 / vendor_perl.) em try1.pl linha 3. BEGIN falhou -. Compilação abortado em try1.pl linha 3

O que está errado aqui? .. como corrigir isso?.

Oh .. quase me esqueci, eu não posso alter / instalação / modifica nada nesta caixa Solaris, necessidades esse script para ser enviado a um cliente que executa Solaris 10 !. Então, pedindo-lhe para instalar um módulo não é definitivamente uma opção. : (

Foi útil?

Solução

A mensagem de erro diz que não pode encontrar o módulo Data :: Parse em sua biblioteca Perl caminho de inclusão ( @INC ).

O módulo está disponível de CPAN (Comprehensive Perl Archive Network). Se você precisa de um módulo Perl que não está incluído na base de instalar, normalmente (> 90%) está disponível a partir de CPAN, o de facto Perl local arquivo módulo.

A sua questão é tratada com o módulo CPAN (o módulo CPAN é usado para recuperar módulos de CPAN) documentação. Sugiro começar com FAQ questão 5 "Eu não sou raiz, como posso instalar um módulo em um diretório pessoal?"

Outras dicas

Você deve ser capaz de fazer isso com Time :: peça que é central em Perl 5.10 (correção aqui: não é central em 5.8). Aqui está um exemplo da minha máquina. Veja man strftime, man strptime e perldoc Time::Piece. Nos documentos Time::Piece, que pretende verificar a seção Data de análise . (Os detalhes de conversão pode variar em uma máquina Solaris. Estou no OS X agora no trabalho.)

#!/usr/bin/env perl
use strict;
use warnings;
use Time::Piece;

my $date = Time::Piece->strptime("Tue Apr 7 12:46:59 2009",
  "%a %b %e %H:%M:%S %Y");
my $epoch_date = $date->epoch;

print "$epoch_date\n";

Editar : As bobinas do analisador no CDT (% Z parece não reconhecê-lo), então você pode precisar de fazer isso em duas etapas. Os seguintes trabalhos para mim:

my $string = "Mon Mar 27 05:54:08 CDT 2009";
$string =~ s/CDT/-0500/; # Replace timezone with offset from UTC
my $date = Time::Piece->strptime($string, "%a %b %e %H:%M:%S %z %Y");
my $epoch_date = $date->epoch;

print "$epoch_date\n";

No entanto, agora temos o problema adicional de CDT => -0500 contra CST => -0600. Eu odeio oficialmente o horário de verão.

Você tem certeza que é a mensagem de erro certo? Date :: Parse é um módulo totalmente separado de Time :: ParseDate . Eles fornecem uma funcionalidade semelhante, mas não use o outro.

Você pode usar Module :: CoreList para obter uma lista dos módulos que acompanha 5.8.8. Eu não sei se Solaris 10 inclui todos os módulos adicionais.

Você pode ter que copiar as tripas para fora de um módulo apropriado e colá-lo em seu script. (Lembre-se que um arquivo Perl pode ter várias instruções package.)

Uma vez que você precisar enviar o programa para um cliente que não vai instalar módulos para você, você vai precisar usar PAR :: Packer para criar um executável nativo que contém todas as suas dependências (ou use apenas Núcleo Modules).

Solaris 10 não parece gostar muito de mim. Eu estou tentando executar um script simples para aceitar data e retorno época da data

Pergunta boba, mas o que é a fonte da cadeia de data de entrada? Se a string é buscada a partir do sistema de seu código pode ser muito mais simples.

discussão antiga, mas esta ajuda pode pessoas com o mesmo problema. Use a função timelocal no módulo Time :: Local padrão. Veja perlfaq 4

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top