April 2010 Archive

Foo-Magazin-Titel

Heute ist die neue, 14. Ausgabe des Perl-Magazins $foo erschienen.

Inhalt der 14. Ausgabe:

Performance großer Webseiten - Teil 2

Dr. Johannes Mainusch von XING erläutert in diesem Teil einiges dazu, wie wichtig Performance bei Webseiten ist. Auch einen kurzen Blick unter die Motorhaube bei XING gibt der Autor. Gleichzeit möchte der Artikel die "Awareness" für Performance erhöhen.

Perl hilft der Feuerwehr - Teil 2

Im zweiten Teil über die Brandmeldeanlagen-Simulation geht es darum, wie der Pluginmechanismus umgesetzt wurde und wie ein Arduino-Brandmelder angeschlossen wurde.

XMLSocket-Klasse in Verbindung mit Perl-Sockets

Markus Schaffer zeigt an einem Beispiel, wie er mit einem Flash-Film, das ein Socket zu ein Perl-Programm aufbaut, Daten in "Echtzeit" auf seine Webseite bekommt.

Perl 6 - Der Himmel für Programmierer

Herbert Breunung geht im dritten Update auf die Neuerungen in der Perl 6-Landschaft ein.

Was ist neu in Perl 5.12?

Eine neue Perl-Version wurde veröffentlicht. Dabei gibt es auch wieder einige Änderungen. Dieser Artikel zeigt die größten Änderungen in der neuen Version.

Perl Scopes Tutorial - Teil 4

Im vierten Teil des Perl Scopes Tutorials geht Ferry Bolhár-Nordenkampf auf lexikalische Pragmas ein. Weiterhin geht er auf die Schlüsselwörter "my", "our" und "state" ein.

Eine Shell für Perl - Devel::REPL

Oft möchte man eine Kleinigkeit in Perl ausprobieren, einfach mal testen, ob der Befehl überhaupt das gewünschte Ergebnis bringt oder nicht. Und dann jedesmal einen Einzeiler mit "perl -wle '...'" daraus machen ist zu viel Tipparbeit. Hier wäre eine Perl-Shell ganz nützlich. Dieser Artikel zeigt Devel::REPL - ein Modul, das genau dafür gemacht ist.

Komplexe Datenstrukturen mit Data::Dumper sichtbar machen

Der Inhalt von Datenstrukturen ist manchmal ein Rätsel, vor allem dann, wenn die Daten aus fremden Modulen eingelesen werden oder über weitverzweigte if-Konstrukte befüllt werden. Spätestens dann, wenn ein Hash Referenzen enthält bekommt man mit print %hash nur noch die bekannte Hexausgabe HASH(0x814cc20) und man ist nicht viel schlauer als vorher. Colin Hotzky zeigt, wie man mit Data::Dumper die Datenstrukturen "schön" anzeigen lassen kann.

WxPerl Tutorial - Teil 3

Im dritten Teil des WxPerl Tutorials zeigt Herbert Breunung wie die Layout- oder Geometriemanager - auch Sizer genannt - in WxPerl-Anwendungen eingesetzt werden können um eine saubere Anordnung der Bedienelemente zu gewährleisten.

App::cpanminus

Thomas Fahle stellt in seinem "HowTo"-Artikel den neuesten CPAN-Client vor: App::cpanminus. Er zeigt, wie man mehr aus dem Client holen kann.

Merkwürdigkeiten in Perl

Ein kurzer Artikel darüber, was man bei der Verwendung von Regulären Ausdrücken beachten muss und man Variablen wie $1, $2 usw. verwendet.

... und vieles mehr

  • Neues von der TPF - was ist in den letzten 3 Monaten bei der TPF passiert?
  • CPAN-News - Wieder werden 6 neue Module vom CPAN vorgestellt
  • Termine - Was ist los in den nächsten 3 Monaten?

Siehe auch:

Perl 5.12. ist bereits seit dem 13. April 2010 verfügbar. Die Neuerungen sind ausführlich in perl5120delta beschrieben.

Wer die neue Version einfach einmal ausprobieren möchte, kann Perl 5.12 aus den Sourcen parallel zu einem bestehenden Perl installieren.

Bei dieser Gelegenheit kann auch gleich der coole neue CPAN-Installer App::cpanminus ausgiebig an getestet werden.

Installation perl-5.12

Ziel: Perl 5.12 soll parallel zu dem bestehenden Perl 5.8.8 in das Verzeichnis /opt/perl512 installiert werden.

$ sudo mkdir /opt/perl512

$ cd /tmp/
$ wget http://search.cpan.org/CPAN/authors/id/J/JE/JESSE/perl-5.12.0.tar.gz
$ tar xzvf perl-5.12.0.tar.gz
$ cd perl-5.12.0/

$ ./Configure -des -Dprefix=/opt/perl512 -Dusethreads
$ make
$ make test
$ sudo make install

Jetzt sollten zwei verschiedene Perl-Versionen auf dem System vorhanden sein:

$ /opt/perl512/bin/perl -v

This is perl 5, version 12, subversion 0 (v5.12.0) built for i686-linux-thread-multi

Copyright 1987-2010, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl".  If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.

und

$ perl -v

This is perl, v5.8.8 built for i486-linux-gnu-thread-multi

Copyright 1987-2006, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl".  If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.

Die neue Version verwenden

Für Perl 5.12.muss stets der volle Pfad angegeben werden. (Die Umgebungsvariable $PATH bleibt unverändert.) Entweder in der Shebang-Zeile

#!/opt/perl512/bin/perl
use strict;
use warnings;

oder auf der Kommandozeile:

$ /opt/perl512/bin/perl meinprogramm.pl

CPAN-Module mit cpanminus installieren

Zunächst wird App::cpanminus mit Perl 5.12 installiert:

$ cd /tmp/
$ wget http://search.cpan.org/CPAN/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.0001.tar.gz
$ tar -xzvf App-cpanminus-1.0001.tar.gz
$ cd App-cpanminus-1.0001
$ /opt/perl512/bin/perl Makefile.PL
$ sudo make install
 Installing /opt/perl512/lib/site_perl/5.12.0/App/cpanminus.pm
 Installing /opt/perl512/man/man3/App::cpanminus.3
 Installing /opt/perl512/bin/cpanm
 Appending installation info to /opt/perl512/lib/5.12.0/i686-linux-thread-multi/perllocal.pod

Anschließend können CPAN-Module mit dem Kommandozeilentool cpanm installiert werden:

$ sudo /opt/perl512/bin/cpanm CGI
 Fetching http://search.cpan.org/CPAN/authors/id/L/LD/LDS/CGI.pm-3.49.tar.gz ... OK
 Configuring CGI.pm-3.49 ... OK
 ==> Found dependencies: FCGI
 Fetching http://search.cpan.org/CPAN/authors/id/F/FL/FLORA/FCGI-0.71.tar.gz ... OK
 Configuring FCGI-0.71 ... OK
 Building and testing FCGI-0.71 for FCGI ... OK
 Successfully installed FCGI-0.71
 Building and testing CGI.pm-3.49 for CGI ... OK
 Successfully installed CGI.pm-3.49 (upgraded from 3.48)

Siehe auch

Das CPAN-Modul Data::UUID von Ricardo Signes ermöglicht die Erstellung weltweit eindeutiger Universally Unique IDentifier (UUID) gemäß RFC 1422 A Universally Unique IDentifier (UUID) URN Namespace.

UUIDs dienen der eindeutigen Kennzeichnung von Informationen in verteilten Systemen ohne zentrale Koordination.

Ein UUID besteht aus einer 16-Byte-Zahl, die hexadezimal notiert und in fünf Gruppen unterteilt wird. In ihrer Normalform sieht eine UUID beispielsweise so aus

DA2611D6-40EB-11DF-96A3-FE9FC5186A11

Data::UUID kann UUIDs als 16 Byte Long, als String (Normalform), als Hexadezimalzahl und als Base64-kodierten String ausgeben und diese verschiedenen Formate in einander umwandeln. Auch namensbasierte UUIDs können in den genannten Formaten einfach erzeugt werden. Eine Vergleichsfunktion für UUIDs ist ebenfalls im Lieferumfang enthalten.

 

String UUIDs (Normalform)

Die Methode create_str() erzeugt eine zufällige UUID als String.

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

use Data::UUID;

my $ug = Data::UUID->new();

for ( 1 .. 5 ) {
	print $ug->create_str(), "\n";
}

Das Programm erzeugt z.B. folgende Ausgabe:

17654D24-40EB-11DF-93A0-159FC5186A11
17655904-40EB-11DF-93A0-159FC5186A11
17655BFC-40EB-11DF-93A0-159FC5186A11
17655ECC-40EB-11DF-93A0-159FC5186A11
17656192-40EB-11DF-93A0-159FC5186A11

 

Binäre UUIDs

16-Byte-Zahlen werden mit den Methoden create() oder create_bin() erzeugt. Zur Ausgabe auf dem Bildschirm werden die UUIDs hier mit der Methode to_string() in die Normalform umgewandelt.

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

use Data::UUID;

my $ug = Data::UUID->new();

   # Die beiden Methoden sind identisch
my $bin_uuid_1 = $ug->create();
my $bin_uuid_2 = $ug->create_bin();

print $ug->to_string( $bin_uuid_1 ) , "\n";
print $ug->to_string( $bin_uuid_2 ) , "\n";

Das Programm erzeugt z.B. folgende Ausgabe:

C9BD82B0-40EC-11DF-9BBF-26A1C5186A11
C9BD89CC-40EC-11DF-9BBF-26A1C5186A11

Die beiden Methoden sind intern identisch; durch den zweimaligen Aufruf werden auch zwei unterschiedliche UUIDs erzeugt.

 

Hexadezimale UUIDs

Die Methode create_hex() erzeugt UUIDs als hexadezimale Zahl.

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

use Data::UUID;

my $ug = Data::UUID->new();

for ( 1 .. 5 ) {
	print $ug->create_hex(), "\n";
}

Das Programm erzeugt z.B. folgende Ausgabe:

0xEF20D4F840F111DF93B9DFA7C5186A11
0xEF20DD0E40F111DF93B9DFA7C5186A11
0xEF20DE8040F111DF93B9DFA7C5186A11
0xEF20DFD440F111DF93B9DFA7C5186A11
0xEF20E13240F111DF93B9DFA7C5186A11

 

Base64 kodierte UUIDs

Base64 kodierte UUIDs lassen sich mit der Methode create_b64() erzeugen.

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

use Data::UUID;

my $ug = Data::UUID->new();

for ( 1 .. 5 ) {
	print $ug->create_b64(), "\n";
}

Das Programm erzeugt z.B. folgende Ausgabe:

6JxiLPJA3xGwTFSoxRhqEQ==
9qdiLPJA3xGwTFSoxRhqEQ==
gKpiLPJA3xGwTFSoxRhqEQ==
4qxiLPJA3xGwTFSoxRhqEQ==
Oq9iLPJA3xGwTFSoxRhqEQ==

 

UUIDs vergleichen

Binäre UUIDs lassen sich mit der Methode compare() vergleichen. Falls die UUIDs in einem anderen Format vorliegen, können diese mit den Methoden from_string(), from_hexstring() oder from_b64string() in das binäre Format umgewandelt werden. compare() kann einfach in benutzerdefinierten Vergleichsroutinen für sort verwendet werden.

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

use Data::UUID;

my @uuids = ();

my $ug = Data::UUID->new();

for ( 1 .. 5 ) {

    # Binary UUIDs
    push( @uuids, $ug->create() );
}

foreach my $uuid ( sort uuid_compare @uuids ) {
    print $ug->to_string($uuid), "\n";
}

sub uuid_compare {
    my $res = $ug->compare( $a, $b );
    return $res;
}

Das Programm erzeugt z.B. folgende Ausgabe:

9C9DC1A8-40EE-11DF-AFFA-9CA3C5186A11
9C9DC5E0-40EE-11DF-AFFA-9CA3C5186A11
9C9DC612-40EE-11DF-AFFA-9CA3C5186A11
9C9DC63A-40EE-11DF-AFFA-9CA3C5186A11
9C9DC662-40EE-11DF-AFFA-9CA3C5186A11

 

Namespace UUIDs

Data::UUID unterstützt die im RFC 4122 vorgeschlagenen Namespaces

  • NameSpace_DNS
  • NameSpace_URL
  • NameSpace_OID
  • NameSpace_X500

Diese Namensräume sollen u.a. gewährleisten,

  • das UUIDs, die aus dem selbem Namen (Ursprung) im selben Namensraum erzeugt werden, stets identisch sind.
  • das UUIDs, die aus dem selbem Namen (Ursprung) in einem anderen Namensraum erzeugt werden, sich von den erstgenannten unterscheiden.

Das nachfolgende Programm liefert auch bei mehrmaligen Aufruf auf unterschiedlichen Rechnern das selbe Ergebnis.

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

use Data::UUID;

my $ug = Data::UUID->new();

for my $name ( 1 .. 5 ) {
    print "Name: $name\n";
    print "Namespace DNS: ",
        $ug->create_from_name_str( NameSpace_DNS, $name ), "\n";
    print "Namespace URL: ",
        $ug->create_from_name_str( NameSpace_URL, $name ), "\n";
}

Das Programm erzeugt folgende Ausgabe:

Name: 1
Namespace DNS: AFD0B036-625A-3AA8-B639-9DC8C8FFF0FF
Namespace URL: 9311744C-3746-3502-84C9-D06E8B5EA2D6
Name: 2
Namespace DNS: 9C45C2F1-1761-3DAA-AD31-1FF8703AE846
Namespace URL: 4BB9C1A0-DED7-3F16-93FB-BD2CBAC9A815
Name: 3
Namespace DNS: 15E0BA07-10E4-3D7F-AAFF-C00FED873C88
Namespace URL: 78F8CF0B-0C6A-3FB8-9D24-1E4A8E882EAA
Name: 4
Namespace DNS: BC27B4DB-BC0F-34F9-AE8E-4B72F2D51B60
Namespace URL: C8F0193B-CDC1-3F89-93DB-2FC9698580BD
Name: 5
Namespace DNS: 7586BFED-B8B8-3BB3-9C95-09A4A79DC0F7
Namespace URL: 80C57EB0-2ACB-36AC-89F9-95F0481C77A6

 

Siehe auch

Über dieses Archiv

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

März 2010 ist das vorherige Archiv.

Mai 2010 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.