Descobrindo Anos Bissextos
Este código pode lhe ser útil caso você esteja trabalhando com datas, calendários ou algo do tipo.
Se você quer saber se um determinado ano é bissexto ou não, esta função lhe dará precisamente a resposta.
Basta chamá-la passando o ano por parâmetro, assim:
isBissexto([ANO])
O retorno dessa função é um boolean (0 ou 1), indicando verdadeiro para anos bissextos.
A função:
sub isBissexto(){ my $ano = $_[0]; if ($ano%400==0){ return 1; }elsif ($ano%4==0 && $ano%100!=0){ return 1; }else{ return 0; } }
Veja o Código Completo
(func-isbissexto.pl)
#!/usr/bin/perl
print &isBissexto(1996); # Mostrará na tela '1', pois 1996 é um ano bissexto.sub isBissexto(){ my $ano = $_[0]; if ($ano%400==0){ return 1; }elsif ($ano%4==0 && $ano%100!=0){ return 1; }else{ return 0; } }
Descobrindo o Dia da Semana
Olá, estreiando nossa parte sobre Funções, um código para obter o dia da semana de qualquer data.
Seu funcionamento é muito simples. Você chama a função, informando uma data por parâmetro, e ela lhe retorna um número correspondente à data, dessa forma:
Retorna 0 se Domingo
Retorna 1 se Segunda
Retorna 2 se Terça
Retorna 3 se Quarta
Retorna 4 se Quinta
Retorna 5 se Sexta
Retorna 6 se Sábado
Para obter o resultado, devemos passar os três argumentos que correspondem ao dia, mes e ano, assim:
diaSemana([DIA,][MES,][ANO]);
Vamos ver agora como fica o corpo da função:
sub diaSemana(){ my $dia = $_[0]; my $mes = $_[1]; my $ano = $_[2]; my $d_semana=0; $d_semana=$ano+$dia+3*($mes-1)-1; if($mes<3){$ano--;} else{$d_semana-=int(0.4*$mes+2.3);} $d_semana+=int(($ano/4)-int((($ano/100+1)*0.75))); $d_semana%=7; return $d_semana; }
Note que para pegar os argumentos, o Perl usa a array especial @_
Assim, em nosso script, para obter os três argumentos iniciais, informamos diretamente a posição destes ($_[0], $_[1] e $_[2]) para as respectivas variáveis locais (my) de destino.
Veja Funcionando:
[ Que Dia da Semana Caiu? ]
Veja o Código Completo:
(func-diasemana.pl)
#!/usr/bin/perl
print &diaSemana(13,4,2008); # Mostrará na tela '0', porque 13/4/2008 caiu num Domingo. sub diaSemana(){ my $dia = $_[0]; my $mes = $_[1]; my $ano = $_[2]; my $d_semana=0; $d_semana=$ano+$dia+3*($mes-1)-1; if($mes<3){$ano--;} else{$d_semana-=int(0.4*$mes+2.3);} $d_semana+=int(($ano/4)-int((($ano/100+1)*0.75))); $d_semana%=7; return $d_semana; }