time
Postać tekstowa lub wydzielona na poszczególne pola:
localtime(time) lub po prostu localtime
W MS Excelu stosuje się zapis liczba_dni.liczba_sekund. Konwersja takiego zapisu to np.
print ~~gmtime 86400*(38685.46798-25567), "\n";
Postać tekstowa zależna od języka z możliwością konfiguracji:
use POSIX qw(strftime); $now_string = strftime "%a %b %e %H:%M:%S %Y", localtime;
W języku polskim wystarczy dodać na początku
use locale;
Bardziej poprawnie gramatycznie (bo w dopełniaczu):
($mday,$mon,$year) = (localtime)[3..5];
$todaydate = ($mday) . " " .
(qw(stycznia lutego marca kwietnia maja czerwca lipca
sierpnia września października listopada grudnia))[$mon]
. " " . ($year+1900);
Pożyteczne funkcje do czasu (daty) są w modułach Time::ParseDate, Date::Calc, Date::Parse oraz Date::Manip.
Np. różnica sekund:
use Date::Parse; my $data1 = '2006-08-31 07:25:14'; my $data2 = '2006-08-31 07:25:17'; print str2time($data2)-str2time($data1);
Funkcja odwrotna do localtime to timelocal:
use Time::Local; $liczbasek = timelocal($sek,$min,$godz,$dzien,$mies,$rok);
Do operacji na czasie w milisekundach służy moduł Time::HiRes.
My ogranicza zasięg zmiennych będących jej argumentami do bieżacego bloku funkcji eval{}, procedury lub zaimportowanego pliku.
Tak zadeklarowane zmienne są z reguły ciut szybsze niż normalne - globalne.
$salt = join '',('A'..'Z','a'..'z','0'..'9','.','/')[rand 64,rand 64];
$text = join "", unpack "H*", $text;
use Term::ReadKey; my $key = ReadKey(10);
=tu start komentarza komentarz koniec =cut
package Test; use potrzebny_modul;
sub moja_funkcja {
return "Jest OK"; # slowo return jest tu zbedne
}
1;
Dostęp do argumentów wywołania tradycyjnie przez wektor @_, przy czym element o indeksie 0, posiada referencję do pakietu
Wywołanie funkcji musi się odbywać w odniesieniu do pakietu:
Test::moja_funkcja();
lub
use Test; $zwrot=Test->moja_funkcja; # w zmiennej zwrot bedzie "Jest OK"
Jeżeli jednak chcesz żeby Twój pakiet udostępniał jakieś zmienne/funkcje bezpośrednio w pakiecie w którym został użyty (zwykle - w pakiecie main), wtedy właśnie używasz Exportera. Powoduje on, że to co podasz w tablicy @EXPORT jest w trakcie wykonywania use Moduł; eksportowane, czyli jest tworzone coś w rodzaju aliasu wskazującego na nazwę w Twoim pakiecie.
I np. jeżeli napiszesz na początku programu use POSIX, to moduł POSIX
wyeksportuje nazwę strftime() (i wiele innych), czyli jeżeli późniejużyjesz funkcji strftime() to tak naprawdę zostanie wywołana funkcja POSIX::strftime().
Przydatne manuale: perlmod i perlmodlib, oraz perlboot, perltoot, perltootc, perlobj, perlbot (w takiej kolejności)
use Benchmark qw(cmpthese);
cmpthese($ile_razy, {
'nazwa1' => sub { ...kod1... },
'nazwa2' => sub { ...kod2... },
});
http://www.wired.com/news/culture/0,1284,42259,00.html?tw=wn20010307
$_='while(read+STDIN,$_,2048){$a=29;$b=73;$c=142;$t=255;@t=map{$_%16or$t^=$c^=(
$m=(11,10,116,100,11,122,20,100)[$_/16%8])&110;$t^=(72,@z=(64,72,$a^=12*($_%16
-2?0:$m&17)),$b^=$_%64?12:0,@z)[$_%8]}(16..271);if((@a=unx"C*",$_)[20]&48){$h
=5;$_=unxb24,join"",@b=map{xB8,unxb8,chr($_^$a[--$h+84])}@ARGV;s/...$/1$&/;$
d=unxV,xb25,$_;$e=256|(ord$b[4])<<9|ord$b[3];$d=$d8^($f=$t&($d12^$d4^
$d^$d/8))<<17,$e=$e8^($t&($g=($q=$e14&7^$e)^$q*8^$q<<6))<<9,$_=$t[$_]^
(($h=8)+=$f+(~$g&$t))for@a[128..$#a]}print+x"C*",@a}';s/x/pack+/g;eval
Niedozwolone jest: wykorzystywanie modułów nie należących do standardowej dystrybucji perla, wykorzystywanie funkcji działających tylko w określonym otoczeniu, wykorzystywanie wiedzy innych.
Liczba znaków liczona jest bez ścieżki do perla (#!.*perl). Tiebreaker to dodatkowa puktacja przy tej samej liczbie. Ostateczny wynik podaje się odzielając kropką (np. 99.61). Przy tych samych wynikach decyduje kolejność zgłoszeń.
Odsyłacze:
http://kernelpanic.pl/perlgolf-list.mx [pclp #4 i dalsze] http://www.ceti.pl/~kompas/golf/ [pclp #3] http://golf.negativeiq.pl/ [pclp #1 i #2] http://www.xs4all.nl/~thospel/golf/rules.html [ogólne reguły] http://perlgolf.sourceforge.net/ [rozwiązania] http://terje.dev.webon.net/golf/ [rozwiązania] http://perlmonks.org/index.pl?node=Obfuscated%20Code [rozwiązania] http://archive.develooper.com/golf@perl.org/ [dyskusje]
perl -MO=Deparse -e 'kod' perl -MO=Deparse skrypt.pl