Mai 2009 Archive

Mit dem CPAN-Modul CPAN::Mini und dem dazugehörigen Kommandozeilen-Tool minicpan von Ricardo Signes ist sehr einfach, eine CPAN Kopie, die nur die aktuellsten Versionen enthält, lokal auf der Festplatte zu erstellen.

Das ist sehr praktisch, wenn man im Zug oder Flugzeug ohne stabile Internetanbindung arbeiten möchte. (Auf CPAN::Mini geht der Beitrag Making your own CPAN-Mini genauer ein.)

CPAN::Mini::Webserver von Léon Brocard bietet ein Webinterface zu CPAN::Mini und ermöglicht so die komfortable Suche im lokalen CPAN-Mirror im Stil von http://search.cpan.org/.

 

/2009/05/CPAN-Mini-Webserver.png

Mit der Kombination aus Perldoc::Server, CPAN-Mini und CPAN::Mini::Webserver kann die Perl-Outdoor-Programming-Season eröffnet werden.

Siehe auch:

Das Jahr-2038-Problem kann möglicherweise zu Softwareausfällen im Februar 2038 auf 32-Bit-Systemen führen.

Michael Schwern's Time::y2038 schafft auf besonders einfache Art und Weise Abhilfe für Legacy Cody.

Für Windows steht Time::y2038 leider noch nicht zur Verfügung.

Beispiel mit 2038-Bug:

#!/usr/bin/perl
use strict;
use warnings;
#
# Based on http://maul.deepsky.com/~merovech/2038.perl.txt
#

# Zeitzone auf GMT aka UTC setzen
$ENV{'TZ'} = "GMT";

# Epochsekunden kurz vor bzw. nach dem kritischen Event
# in einer Schleife durchlaufen und pruefen, ob Datum 
# und Uhrzeit korrekt ausgegeben werden.
my $clock;
for ($clock = 2147483641; $clock < 2147483651; $clock++) {
	 print scalar localtime($clock), "\n";
}

Ausgabe auf einem 32-Bit Linux:

Tue Jan 19 03:14:01 2038
Tue Jan 19 03:14:02 2038
Tue Jan 19 03:14:03 2038
Tue Jan 19 03:14:04 2038
Tue Jan 19 03:14:05 2038
Tue Jan 19 03:14:06 2038
Tue Jan 19 03:14:07 2038
Fri Dec 13 20:45:52 1901
Fri Dec 13 20:45:53 1901
Fri Dec 13 20:45:54 1901

Auf 32-Bit Unix/Linux-Systemen wird die Zeit auf den 13. Dezember 1901 gesetzt.

Ausgabe auf einem 32-Bit Windows:

Tue Jan 19 04:14:01 2038
Tue Jan 19 04:14:02 2038
Tue Jan 19 04:14:03 2038
Tue Jan 19 04:14:04 2038
Tue Jan 19 04:14:05 2038
Tue Jan 19 04:14:06 2038
Tue Jan 19 04:14:07 2038

Das Programm stoppt genau nach der kritischen Sekunde im Jahr 2038.

Beispiel mit Time::y2038

Dank Time::y2038 muss nur eine Zeile Code hinzugefügt werden und das Programm ist Jahr-2038-fest.

#!/usr/bin/perl
use strict;
use warnings;

use Time::y2038;
#
# Based on http://maul.deepsky.com/~merovech/2038.perl.txt
#

# Zeitzone auf GMT aka UTC setzen
$ENV{'TZ'} = "GMT";

# Epochsekunden kurz vor bzw. nach dem kritischen Event
# in einer Schleife durchlaufen und pruefen, ob Datum 
# und Uhrzeit korrekt ausgegeben werden.
my $clock;
for ($clock = 2147483641; $clock < 2147483651; $clock++) {
	 print scalar localtime($clock), "\n";
}

Ausgabe des Programms (Linux)

Tue Jan 19 03:14:01 2038
Tue Jan 19 03:14:02 2038
Tue Jan 19 03:14:03 2038
Tue Jan 19 03:14:04 2038
Tue Jan 19 03:14:05 2038
Tue Jan 19 03:14:06 2038
Tue Jan 19 03:14:07 2038
Tue Jan 19 03:14:08 2038
Tue Jan 19 03:14:09 2038
Tue Jan 19 03:14:10 2038

Datumsberechnungen (nicht nur über das Jahr 2038 hinaus)

Wer Datumsberechnungen (nicht nur über das Jahr 2038 hinaus) sicher durchführen möchte, sollte sich ohnehin nicht auf time() und Epochal-Sekunden verlassen, sondern besser ein CPAN-Modul wie Date::Calc oder DateTime verwenden.

Beispiel:

use strict;
use warnings;

use DateTime;

my $dt = DateTime->now();  

print $dt->iso8601() , "\n";

$dt->add(years => 200);

print $dt->iso8601() , "\n";

Siehe auch:

Perldoc::Server von Jon Allen stellt einen lokalen Server für die Dokumention aller lokal installierten Perl Module zur Verfügung.

Die Optik entspricht dem bekannten und bewährtem Look and Feel von perldoc.perl.org. Alle use und require sind mit Hyperlinks zu den entsprechenden installierten Modulen hinterlegt.

Suchfunktion, History, Syntax-Highlighting, Zeilennummerierung und weitere Eye-Candies runden das Ganze ab.

Auf einmal macht das Suchen in der Dokumentation richtig Spaß. Danke JJ.

Siehe auch:

File::LibMagic von Andreas Fitzner ermöglicht die Bestimmung des Typs oder MIME-Typs einer Datei. Dazu nutzt es die Bibliothek libmagic des bekannten Unix/Linux-Tools file.

Beispiel

#!/usr/bin/perl
use warnings;
use strict;

use File::LibMagic ':easy';

my @files = qw(
        /bin/ls
        /etc/localtime
        /etc/timezone
        /etc/motd
);


foreach my $file ( @files ) {

	print "$file:\n\t", MagicFile( $file ),"\n";
}

Das Programm erzeugt auf meinem System (Ubuntu 8.04) folgende Ausgabe:

/bin/ls:
        ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.8, dynamically linked (uses shared libs), stripped
/etc/localtime:
        timezone data
/etc/timezone:
        ASCII text
/etc/motd:
        symbolic link to `/var/run/motd'

Ubuntu Installationstipps

File::LibMagic benötigt libmagic.

$ sudo apt-get install libmagic1
$ sudo apt-get install libmagic-dev

Siehe auch

Gemäß Yahoo! Developer Network gibt es dreizehn einfache Regeln um die Ladezeit einer Website zur verringern: Thirteen Simple Rules for Speeding Up Your Web Site.

Regel Nr. Zehn: Minify JavaScript empfiehlt alle unnötigen Zeichen aus JavaScript zu entfernen, also beispielsweise überflüssigen Whitespace und Kommentare.

Mit JavaScript::Minifier von Peter Michaux geht das ganz einfach:

#!/usr/bin/perl
use strict;
use warnings;

use JavaScript::Minifier qw(minify);
open(INFILE, 'myScript.js') or die $!;
open(OUTFILE, '>', 'myScript-min.js') or die $!;

minify(input => *INFILE, outfile => *OUTFILE);

close(INFILE) or die $!;
close(OUTFILE) or die $!;

Siehe auch

Über dieses Archiv

Diese Seite enthält alle Einträge von Perl HowTo von neu nach alt.

April 2009 ist das vorherige Archiv.

Juni 2009 ist das nächste Archiv.

Aktuelle Einträge finden Sie auf der Startseite, alle Einträge in den Archiven.

Blog Roll

Powered by

Powered by Movable Type 5.2.10

Creative Commons-Lizenz

Creative Commons License
Dieses Weblog steht unter einer Creative Commons-Lizenz.