<div dir="ltr">Eu tava escrevendo uma resposta, mas o buss foi mais rápido então cortando os overlaps, com bastante licença poética:<div><br></div><div>Primeiro as masturbações estilísticas:<div><br></div><div>> <span style="font-family:arial,sans-serif;font-size:13px">#!/usr/bin/perl</span></div>

<div><span style="font-family:arial,sans-serif;font-size:13px"><br></span></div><div><span style="font-family:arial,sans-serif;font-size:13px">Eu prefiro usar:</span></div><div><span style="font-family:arial,sans-serif;font-size:13px"><br>

</span></div><div><span style="font-family:arial,sans-serif;font-size:13px">#!/usr/bin/env perl</span></div><div><span style="font-family:arial,sans-serif;font-size:13px"><br></span></div><div><span style="font-family:arial,sans-serif;font-size:13px">Porque, se o script for usado num ambiente onde espera-se outro perl que não o do /usr/bin, como num perlbrew por exemplo, você não fica com a versão antiga do perl hardcoded.</span></div>

<div><span style="font-family:arial,sans-serif;font-size:13px"><br></span></div><div><span style="font-family:arial,sans-serif;font-size:13px">Mas no seu caso, não acredito que vá ocorrer esse caso de uso, então pode ficar como está, numa boa. Não está errado.</span></div>

<div><span style="font-family:arial,sans-serif;font-size:13px"><br></span></div><div><span style="font-family:arial,sans-serif;font-size:13px">> </span><span style="font-family:arial,sans-serif;font-size:13px">use strict;</span></div>

<span style="font-size:13px;font-family:arial,sans-serif">> use warnings;</span><div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif">Bom garoto!</font></div><div><font face="arial, sans-serif"><br>

</font></div><div><font face="arial, sans-serif">Ambas as pragmas são mandatórias, caso você esteja escrevendo algo minimamente decente. Tem gente que gosta também do:</font></div><div><font face="arial, sans-serif"><br>
</font></div>
<div><font face="arial, sans-serif">use diagnostics;</font></div><div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif">que te dá ainda mais informação em caso de problemas.</font></div>
<div>
<font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif">> </font><span style="font-family:arial,sans-serif;font-size:13px">use POSIX;</span></div><div><span style="font-family:arial,sans-serif;font-size:13px"><br>

</span></div><div><span style="font-family:arial,sans-serif;font-size:13px">Aqui, a explicação longa é longa (call @garu), mas resumidamente, você está importando alguns símbolos desnecessários automaticamente pro namespace corrente.</span></div>

<div><span style="font-family:arial,sans-serif;font-size:13px"><br></span></div><div><font face="arial, sans-serif">Isso é completamente irrelevante pro seu caso, mas vc poderia fazer assim:</font></div><div><font face="arial, sans-serif"><br>

</font></div><div><font face="arial, sans-serif">use POSIX ();</font></div><div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif">que significa, adicione o módulo POSIX mas não importe nenhum símbolo. Ou ainda:</font></div>

<div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif">use POSIX qw{ strftime }</font></div><div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif">que significa, adicione o módulo POSIX e importe somente o símbolo (função) strftime. Nesse caso, ao usar a sub, vc não precisaria mais prefixar com POSIX::</font></div>

<div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif">Do meu ponto de vista, tanto faz:</font></div><div><font face="arial, sans-serif"><br></font></div><div><span style="font-family:arial,sans-serif">use POSIX ();</span><font face="arial, sans-serif"><br>

</font></div><div><span style="font-family:arial,sans-serif">POSIX::strftime();</span></div><div><span style="font-family:arial,sans-serif"><br></span></div><div><span style="font-family:arial,sans-serif">ou</span></div>
<div>
<span style="font-family:arial,sans-serif"><br></span></div><div><div><span style="font-family:arial,sans-serif">use POSIX qw( strftime );</span><font face="arial, sans-serif"><br></font></div><div><span style="font-family:arial,sans-serif">strftime();</span></div>

</div><div><span style="font-family:arial,sans-serif"><br></span></div><div><br></div><div><font face="arial, sans-serif">Eu também prefiro nomear_funcoes_em_minusculas_com_underscore do que comCameCaseIgualAoJava.</font></div>

<div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif">***</font></div><div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif"><br>

</font></div><div><font face="arial, sans-serif">Sobre a sua dúvida na captura e tratamento dos parâmetros tem algumas sutiliezas que podem levar a erros.</font></div><div><font face="arial, sans-serif"><br></font></div>
<div>
<font face="arial, sans-serif">*** Primeiramente, acessar elementos versus acessar slice de um array</font></div><div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif">A forma de acessar um escalar dentro de um array é indicando que ele é um escalar, e dizendo qual índice você quer, ou seja, para acessar o terceiro elemento do array foo, temos:</font></div>

<div><font face="arial, sans-serif"><br></font></div><div><span style="font-family:arial,sans-serif">my $elemento = $foo[ 2 ]; </span><br></div><div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif">que significa mais ou menos, pegue o escalar ($) que está no array foo na posição 3 (índice 2).</font></div>

<div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif">Quando você faz:</font></div><div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif">$a = @_[3];</font></div>

<div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif">Você está pedindo, me dê um array (@) contendo os elementos que estão "nos índices" 3 do array _. Isso é um slice, que normalmente é usado pra pegar pedaços de array.</font></div>

<div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif">No seu caso, como você tá pedidndo uma lista com apenas um elemento, também funciona mas experimente testar o seguinte:</font></div>

<div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif">my $a = @_[1,2];</font></div><div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif"><br></font></div>

<div><font face="arial, sans-serif">Dito isso, quando vc faz:</font></div><div><font face="arial, sans-serif"><br></font></div><div><span style="font-family:arial,sans-serif;font-size:13px">$foo = @_[0], a menos que você saiba exatamente o que está fazendo, isso está errado. Não é questão de estilo aqui. O correto seria:</span><font face="arial, sans-serif"><br>

</font></div><div><span style="font-family:arial,sans-serif;font-size:13px"><br></span></div><div><span style="font-family:arial,sans-serif;font-size:13px">$foo = $_[0];  ## Me dê o escalar que está no índice zero do array _</span></div>

<div><span style="font-family:arial,sans-serif;font-size:13px"><br></span></div><div><span style="font-family:arial,sans-serif;font-size:13px"><br></span></div><div><span style="font-family:arial,sans-serif;font-size:13px">*** Acessando parâmetros de funções</span></div>

<div><span style="font-family:arial,sans-serif;font-size:13px"><br></span></div><div><span style="font-family:arial,sans-serif;font-size:13px">Os parâmetros de funções são passados no array _, ou seja, @_.</span></div><div>

<span style="font-family:arial,sans-serif;font-size:13px"><br></span></div><div><span style="font-family:arial,sans-serif;font-size:13px">Ele faz aliasing das variáveis passadas, ou seja, ao lidar com $_[] diretamente, você pode causar efeitos colaterais externos inesperados.</span></div>

<div><span style="font-family:arial,sans-serif;font-size:13px"><br></span></div><div><span style="font-family:arial,sans-serif;font-size:13px">Por exemplo, nesse oneliner apenas para efeitos didáticos:</span></div><div><span style="font-family:arial,sans-serif;font-size:13px"><br>

</span></div><div>perl  -e 'sub foo { $_[0]++ } $a=1; foo($a); print $a . $/'<span style="font-family:arial,sans-serif;font-size:13px"><br></span></div><div><br></div><div>Por isso é boa prática criar uma cópia local dos argumentos dentro da função. Isso pode ser feito de varias maneiras, conforme o caso:</div>

<div><br></div><div><br></div><div>## Crie uma cópia do @_ chamada @args;<br></div><div>my @args = @_; </div><div><br></div><div><br></div><div>## Crie uma lista com dois escalares, atribua os dois primeiros elementos do @_ a cada um deles e descarte o resto;<br>

</div><div>my ( $first, $second ) = @_;</div><div><br></div><div><br></div><div>## Crie uma lista contendo dois escalares, um array, guarde os dois primeiros elementos de @_ nos escalares e o resto no array @tail</div><div>

my ( $first, $second, @tail ) = @_</div><div><br></div><div><br></div><div>## Remova o primeiro elemento de @_ e coloque-o no escalar criado</div><div>my $first = shift;   ## Equivalente a my $first = shift @_;</div><div>

my $second = shift;   # Pegue o "novo primeiro" elemento de @_</div><div><br></div><div>A vesão com shift remove definitivamente o primeiro elemento do array. O segundo elemento passa a ser o primeiro, e assim sucessivamente. O tamanho do array é reduzido em 1.</div>

<div><br></div><div>Minhas fontes não confiáveis apontam que a versão com shift é menos eficiente. Por favor me corrijam quem estiver com as fontes corretas.</div><div><br></div><div>Eu prefiro usar as duas primeiras formas. my @args = @_;  ou my ( $first, $second ) = @_;</div>

<div><br></div><div>***</div><div><br></div><div>Conforme o buss apontou, separe uma instrução por linha:</div><div><br></div><div><span style="font-family:arial,sans-serif;font-size:13px">sub calcularDeslocamentoAno {</span></div>

<div>    my ( $ano ) = @_;</div><div><br></div><div>    die '<span style="font-family:arial,sans-serif;font-size:13px">ano invalido</span>'</div><div>      unless defined $ano;</div><div>    </div><div>    return $ano > 99 ? $ano - 1900 : $ano;</div>

<div><span style="font-family:arial,sans-serif;font-size:13px">}</span><br></div><div><span style="font-family:arial,sans-serif;font-size:13px"><br></span></div><div><span style="font-family:arial,sans-serif;font-size:13px">Veja como fica mais claro pro próximo cara que for dar manutenção nisso.</span></div>

<div><span style="font-family:arial,sans-serif;font-size:13px"><br></span></div><div><span style="font-family:arial,sans-serif;font-size:13px">***</span></div><div><span style="font-family:arial,sans-serif;font-size:13px"><br>

</span></div><div><font face="arial, sans-serif">Use qx ao invés de ` pra invocar comandos externos</font></div><div><br></div><div><span style="font-family:arial,sans-serif;font-size:13px">sub calcularDiaInicioHorarioVerao {</span></div>

<div>   my $dia_inicio = qx{ <span style="font-family:arial,sans-serif;font-size:13px">cal 10 2013 | tail -4 | head -1 | cut -d' ' -f7 </span>};</div><div><span style="font-family:arial,sans-serif;font-size:13px">}</span><span style="font-family:arial,sans-serif;font-size:13px"><br>

</span></div><div><span style="font-family:arial,sans-serif;font-size:13px"><br></span></div><div><span style="font-family:arial,sans-serif;font-size:13px">Considerações finais:</span></div><div><span style="font-family:arial,sans-serif;font-size:13px"><br>

</span></div><div><span style="font-family:arial,sans-serif;font-size:13px">1) Seu código está até bem razoável. Compartimentarizado em funções que só fazem uma coisa. Ele está claro no que ele pretende fazer. Isso é muito bom. Té melhor que muito programador "experiente" que tem por aí.</span></div>

<div><span style="font-family:arial,sans-serif;font-size:13px"><br></span></div><div><span style="font-family:arial,sans-serif;font-size:13px">2) Tem uns requintes de Perl 4, mas fazendo os ajustes indicados, que não são nada complicados, seu código vai rejuvenecer uns 20 anos!!!</span></div>

<div><span style="font-family:arial,sans-serif;font-size:13px"><br></span></div><div><span style="font-family:arial,sans-serif;font-size:13px">3) Não é porque você executa comandos do Shell que o seu código Perl fica ruim. Nada disso. É parte da linguagem e perfeitamente normal, principalmente, porque você deixa bem claro o que você está fazendo e de forma organizada. Acessar o shell continua sendo elegante.</span></div>

<div><span style="font-family:arial,sans-serif;font-size:13px"><br></span></div><div><span style="font-family:arial,sans-serif;font-size:13px">Feio é fazer algazarra.</span></div><div><span style="font-family:arial,sans-serif;font-size:13px"><br>

</span></div><div><span style="font-family:arial,sans-serif;font-size:13px">Existem módulos pra rodar comandos externos, com mil funcionalidades, mas acredito que não são necessários no seu caso.</span></div><div><span style="font-family:arial,sans-serif;font-size:13px"><br>

</span></div><div><span style="font-family:arial,sans-serif;font-size:13px">4) DateTime, pode se mais indicado do que calcular datas na mão, mas ele não é "Core" (</span><a href="http://perldoc.perl.org/corelist.html">http://perldoc.perl.org/corelist.html</a>), portanto pode ser difícil de instalar no seu sistema com ambiente restrito. Você tem que medir se o custo de instalar vale o benefício que ele fornece ou ainda se o risco do seu código falhar é alto ou baixo. Isso é uma análise sua.</div>

<div><br></div><div>Eventualmente eu pelo menos comentaria no código que o DateTime poderia ser uma solução mais adequada. Vai que o ambiente muda no futuro e ele possa ser instalado mais facilmente.</div><div><br></div>
<div>
5) Tente escrever testes automatizados que validem a sua aplicação.</div><div><br></div><div><br></div><div><br></div><div>Bom, espero que tenhamos te ajduado. Qualquer coisa avisa.</div><div><br></div><div><br></div><div>

<span style="font-family:arial,sans-serif;font-size:13px">[]'s</span></div><div><span style="font-family:arial,sans-serif;font-size:13px"><br></span></div><div><span style="font-family:arial,sans-serif;font-size:13px"><br>

</span></div><div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif"><br></font></div><div><span style="font-family:arial,sans-serif;font-size:13px"><br>

</span></div><div class="gmail_extra"><br></div></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">2014-02-28 13:31 GMT-03:00 Bruno Buss <span dir="ltr"><<a href="mailto:bruno.buss@gmail.com" target="_blank">bruno.buss@gmail.com</a>></span>:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Oi Geraldo,<div><br></div><div>Respostas inline :-)</div><div class="gmail_extra"><br><br><div class="gmail_quote">

2014-02-28 11:59 GMT-03:00 Geraldo Netto <span dir="ltr"><<a href="mailto:geraldonetto@gmail.com" target="_blank">geraldonetto@gmail.com</a>></span>:<div class=""><br>

<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">Bom Dia Pessoal!<br>
<br>
Consegui evoluir no código com a api do posix mesmo<br>
crio as datas com POSIX::strftime<br>
e calculo o horário de verão pegando a saida do comando cal no shell<br>
<br>
yep, eu sei que é feito, mas resolve o meu problema de um jeito rápido...<br>
por hora, a idéia é só gerar o "okay" da gerencia p/ matar umas 4<br>
versões shell que fazem o mesmo trabalho, mas precisam de alguns<br>
parâmetros diferentes e alguma intervenção humana especificamente no<br>
período de horário de verão<br></blockquote><div><br></div></div><div>Thumbs up por resolver o problema! :D</div><div><br></div><div>Entretanto, o que a galera quer passar aqui, e' que mesmo que você realmente acredite que esta resolvendo seu problema de forma simples e rápida agora... não esta'. Ou melhor, o jeito rápido agora *provavelmente* ira' te causar uma baita dor de cabeça soon(tm).</div>



<div><br></div><div>Tente utilizar o DateTime, e' uma solução ordens de grandeza melhor e não e' tao difícil assim :-)</div><div class=""><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">




<br>
a minha dúvida é primária, suponho...<br>
mas eu não entendi o porque usar o shift<br>
se eu posso verificar com o defined() se o @_[<número>] está definido?<br></blockquote><div><br></div></div><div>O shift serve para voce retirar e retornar o 1o elemento da lista de argumentos/parâmetros que foi passada para sua função.</div>



<div><br></div><div>E' uma das formas idiomáticas de se fazer isso, a outra seria "my ($v_a, $v_b, $v_c) = @_;".</div><div>Pessoalmente prefiro com shift :-)</div><div class=""><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">




<br>
Aceito sugestões e Mais uma vez, Valeu mesmo pela força! :P<br>
<br>
<br>
BTW, código todo a seguir:<br>
<br>
#!/usr/bin/perl<br>
<br>
use strict;<br>
use warnings;<br>
<br>
use POSIX;<br>
<br>
<br>
# a inicia a data em 1900 entao, se for passado 95 => 1995<br>
sub calcularDeslocamentoAno {<br>
    die "ano invalido" unless defined(@_[0]) && return ($_[0] > 99 ?<br>
$_[0] - 1900 : $_[0]);<br>
}<br></blockquote><div><br></div></div><div>Então para você o ano 50 e' o mesmo que o ano 1950? :P</div><div>Ou se eu passar para você o ano 1800, ele retorna -100.</div><div><br></div><div>Outra coisa, você realmente não precisa colocar o return na mesma linha do die...<br>



</div><div>Por exemplo:<br></div><div><br></div><div>sub calcularDeslocamentoAno{</div><div>    my $ano = shift;</div><div><br></div><div>    #Rejeitando coisas que nossa funcao nao sabe tratar.</div><div>    die "ano invalido" unless defined $ano && $ano >= 1900;</div>



<div><br></div><div>    return $ano - 1900;</div><div class=""><div>}</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">




<br>
sub criarData {<br>
    die "parametros invalidos" unless (defined(@_[0]) &&<br>
defined(@_[1]) && defined(@_[2]));<br>
    #Usage: POSIX::strftime(fmt,             sec, min, hour, mday,<br>
mon, year, wday = -1, yday = -1, isdst = -1)<br>
    return POSIX::strftime("%Y,%m,%d", 0, 0, 0, @_[0], (@_[1] -1),<br>
&calcularDeslocamentoAno(@_[2]), 0, 0);<br>
}<br></blockquote><div><br></div></div><div>Idealmente você estaria tratando:</div><div>* Se o 1o parâmetro e' um dia que esta' no mês (posso tentar usar stftime passando o dia 31 de Fev?)</div><div>* Se o 1o parâmetro e' um dia valido at all (dia igual a 44 por exemplo).</div>



<div>* Lembrar que o dia e o mês são 0-based, ou seja Janeiro => 0, Fev => 1, etc.</div><div>...</div><div><br></div><div>Voce tambem poderia fazer:</div><div>sub criarData {<br></div><div>    my ($dia, $mes, $ano) = @_;</div>



<div>    die "parametros invalidos" unless defined $dia   &&</div><div>                                                     defined $mes &&</div><div>                                                     defined $ano;</div>



<div>    ...</div><div>}</div><div><br></div><div>Detalhe: O DateTime tem funções de formatação de data tao boas quanto ;-)</div><div class=""><div> <br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">




<br>
sub calcularDiaInicioHorarioVerao {<br>
    my $dia_inicio = `cal 10 2013 | tail -4 | head -1 | cut -d' ' -f7`;<br>
}<br>
<br>
sub calcularDiaFimHorarioVerao {<br>
    my $dia_fim = `cal 2 2014 | tail -4 | head -1 | cut -d' ' -f7`;<br>
}<br></blockquote><div><br></div></div><div>Alguém já disse em substituir isso tudo por DateTime? :P</div><div class=""><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">




<br>
sub  trim {<br>
    my $s = shift;<br>
    $s =~ s/^\s+|\s+$//g;<br>
    return $s;<br>
}<br>
<br>
print &criarData(2, 5, 2014);<br>
print &trim($dia_inicio);<br>
print &trim($dia_fim);<br></blockquote><div><br></div></div><div>Não sei exatamente qual Perl você ta usando, mas acredito que não e' necessário prefixar as chamadas de funções com &. Inclusive isso e' considerado não legal hoje em dia :-)</div>



<div><br></div><div>[ ]'s</div><div><br></div><div>PS: Utilize uma ferramenta tipo pastebin ou Gist (do GitHub) para copiar e enviar codigos em listas de e-mail :-)</div><div><div class="h5"><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">




<div><br>
Geraldo Netto<br>
Sapere Aude => Non dvcor, dvco<br>
São Paulo, Brasil, -3gmt<br>
site: <a href="http://exdev.sf.net/" target="_blank">http://exdev.sf.net/</a><br>
<br>
</div>2014-02-26 23:41 GMT-03:00 Geraldo Netto <<a href="mailto:geraldonetto@gmail.com" target="_blank">geraldonetto@gmail.com</a>>:<br>
<div><div>> Opa!<br>
><br>
> Tudo okay Pessoal?<br>
><br>
> Eu sou o Geraldo, um ghost reader da SPPM (e algumas outras PMs)<br>
> e eu ando trabalhando vagarosamente num projetinho<br>
> que eu dependo de verificação do horário de verão<br>
><br>
> A idéia é separar o ano em 3 partes:<br>
><br>
> fim do horário de verão (terceiro domingo de fevereiro)<br>
> fora do horário de verão<br>
> início do horário de verão (terceiro sábado de fevereiro)<br>
><br>
> E baseado nisso, lançar um shell que vai receber o timezone, data de<br>
> início e de fim<br>
> p/ fazer a coleta de dados pelo hp openview (comando ovpmbatch)<br>
><br>
> Só que...<br>
> -eu tenho um servidor tru64 (sem suporte)<br>
> -rodando perl 5.8 (2002 pelo o que o version diz...)<br>
> -sem sudo/root/possibilidade de instalação de pacotes de terceiros<br>
> -<inclua-aqui-todas-as-limitações-que-vocês-imaginarem-de-infra><br>
> -meu "core business" é análise de desempenho de software,<br>
> então o código não pode ser muito "perlish"<br>
> porque alguém pode precisar dar manutenção depois de mim<br>
><br>
> Embora eu ainda não tenha código real (só comecei a brincar)<br>
> Eu estou pensando em ir com a api do posix, especificamente a<br>
> função/método strftime<br>
><br>
> Eventualmente vocês teriam alguma sugestão?<br>
><br>
><br>
> Grande Abraço!<br>
><br>
> Geraldo Netto<br>
> Sapere Aude => Non dvcor, dvco<br>
> São Paulo, Brasil, -3gmt<br>
> site: <a href="http://exdev.sf.net/" target="_blank">http://exdev.sf.net/</a><br>
=begin disclaimer<br>
   Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>
 SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org" target="_blank">SaoPaulo-pm@pm.org</a><br>
 L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>
=end disclaimer<br>
</div></div></blockquote></div></div></div><br><br clear="all"><div><br></div>-- <br>Bruno C. Buss<br><a href="http://www.brunobuss.net" target="_blank">http://www.brunobuss.net</a>
</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">2014-02-28 11:59 GMT-03:00 Geraldo Netto <span dir="ltr"><<a href="mailto:geraldonetto@gmail.com" target="_blank">geraldonetto@gmail.com</a>></span>:<div>

<div class="h5"><br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Bom Dia Pessoal!<br>
<br>
Consegui evoluir no código com a api do posix mesmo<br>
crio as datas com POSIX::strftime<br>
e calculo o horário de verão pegando a saida do comando cal no shell<br>
<br>
yep, eu sei que é feito, mas resolve o meu problema de um jeito rápido...<br>
por hora, a idéia é só gerar o "okay" da gerencia p/ matar umas 4<br>
versões shell que fazem o mesmo trabalho, mas precisam de alguns<br>
parâmetros diferentes e alguma intervenção humana especificamente no<br>
período de horário de verão<br>
<br>
a minha dúvida é primária, suponho...<br>
mas eu não entendi o porque usar o shift<br>
se eu posso verificar com o defined() se o @_[<número>] está definido?<br>
<br>
Aceito sugestões e Mais uma vez, Valeu mesmo pela força! :P<br>
<br>
<br>
BTW, código todo a seguir:<br>
<br>
#!/usr/bin/perl<br>
<br>
use strict;<br>
use warnings;<br>
<br>
use POSIX;<br>
<br>
<br>
# a inicia a data em 1900 entao, se for passado 95 => 1995<br>
sub calcularDeslocamentoAno {<br>
    die "ano invalido" unless defined(@_[0]) && return ($_[0] > 99 ?<br>
$_[0] - 1900 : $_[0]);<br>
}<br>
<br>
sub criarData {<br>
    die "parametros invalidos" unless (defined(@_[0]) &&<br>
defined(@_[1]) && defined(@_[2]));<br>
    #Usage: POSIX::strftime(fmt,             sec, min, hour, mday,<br>
mon, year, wday = -1, yday = -1, isdst = -1)<br>
    return POSIX::strftime("%Y,%m,%d", 0, 0, 0, @_[0], (@_[1] -1),<br>
&calcularDeslocamentoAno(@_[2]), 0, 0);<br>
}<br>
<br>
sub calcularDiaInicioHorarioVerao {<br>
    my $dia_inicio = `cal 10 2013 | tail -4 | head -1 | cut -d' ' -f7`;<br>
}<br>
<br>
sub calcularDiaFimHorarioVerao {<br>
    my $dia_fim = `cal 2 2014 | tail -4 | head -1 | cut -d' ' -f7`;<br>
}<br>
<br>
sub  trim {<br>
    my $s = shift;<br>
    $s =~ s/^\s+|\s+$//g;<br>
    return $s;<br>
}<br>
<br>
print &criarData(2, 5, 2014);<br>
print &trim($dia_inicio);<br>
print &trim($dia_fim);<br>
<div><br>
Geraldo Netto<br>
Sapere Aude => Non dvcor, dvco<br>
São Paulo, Brasil, -3gmt<br>
site: <a href="http://exdev.sf.net/" target="_blank">http://exdev.sf.net/</a><br>
<br>
</div>2014-02-26 23:41 GMT-03:00 Geraldo Netto <<a href="mailto:geraldonetto@gmail.com" target="_blank">geraldonetto@gmail.com</a>>:<br>
<div><div>> Opa!<br>
><br>
> Tudo okay Pessoal?<br>
><br>
> Eu sou o Geraldo, um ghost reader da SPPM (e algumas outras PMs)<br>
> e eu ando trabalhando vagarosamente num projetinho<br>
> que eu dependo de verificação do horário de verão<br>
><br>
> A idéia é separar o ano em 3 partes:<br>
><br>
> fim do horário de verão (terceiro domingo de fevereiro)<br>
> fora do horário de verão<br>
> início do horário de verão (terceiro sábado de fevereiro)<br>
><br>
> E baseado nisso, lançar um shell que vai receber o timezone, data de<br>
> início e de fim<br>
> p/ fazer a coleta de dados pelo hp openview (comando ovpmbatch)<br>
><br>
> Só que...<br>
> -eu tenho um servidor tru64 (sem suporte)<br>
> -rodando perl 5.8 (2002 pelo o que o version diz...)<br>
> -sem sudo/root/possibilidade de instalação de pacotes de terceiros<br>
> -<inclua-aqui-todas-as-limitações-que-vocês-imaginarem-de-infra><br>
> -meu "core business" é análise de desempenho de software,<br>
> então o código não pode ser muito "perlish"<br>
> porque alguém pode precisar dar manutenção depois de mim<br>
><br>
> Embora eu ainda não tenha código real (só comecei a brincar)<br>
> Eu estou pensando em ir com a api do posix, especificamente a<br>
> função/método strftime<br>
><br>
> Eventualmente vocês teriam alguma sugestão?<br>
><br>
><br>
> Grande Abraço!<br>
><br>
> Geraldo Netto<br>
> Sapere Aude => Non dvcor, dvco<br>
> São Paulo, Brasil, -3gmt<br>
> site: <a href="http://exdev.sf.net/" target="_blank">http://exdev.sf.net/</a><br>
=begin disclaimer<br>
   Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>
 SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org" target="_blank">SaoPaulo-pm@pm.org</a><br>
 L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>
=end disclaimer<br>
</div></div></blockquote></div></div></div><span class="HOEnZb"><font color="#888888"><br><br clear="all"><div><br></div>-- <br>Bruno C. Buss<br><a href="http://www.brunobuss.net" target="_blank">http://www.brunobuss.net</a>
</font></span></div>
<br>=begin disclaimer<br>
   Sao Paulo Perl Mongers: <a href="http://sao-paulo.pm.org/" target="_blank">http://sao-paulo.pm.org/</a><br>
 SaoPaulo-pm mailing list: <a href="mailto:SaoPaulo-pm@pm.org">SaoPaulo-pm@pm.org</a><br>
 L<<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a>><br>
=end disclaimer<br>
<br></blockquote></div><br></div>