Neues in der Kategorie 101

App::perlbrew - Manage perl installations in your $HOME von 劉康民 (Kang-min Liu) ermöglicht die einfache Installation (ohne root-Rechte) und Verwendung mehrerer Perls in unterschiedlichen Versionen und Konfigurationen in einem eigenem Verzeichnis.

Das noch sehr junge Projekt bietet eine einfache, leichtgewichtige Alternative zu den bekannten und bewährten Modulen local::lib und dem leistungsfähigerem Devel-PPPort - buildperl.pl - build/install perl distributions.

 

OSDC 2010 Lightning talk - Kang-min Liu perlbrew!

In diesem Video des Lightining Talks auf der OSCON 2010 stellt Kang-min Liu perlbrew kurz vor und erläutert warum er dieses Modul geschaffen hat.

 

Installation und grundlegende Konfiguration

App::perlbrew läßt sich entweder wie gehabt über die CPAN-Shell

cpan > install App::perlbrew

oder wie folgt

$ curl -LO http://xrl.us/perlbrew
$ chmod +x perlbrew

installieren. Anschließend steht das Kommandozeilen-Tool perlbrew zur Verfügung.

Die grundlegende Konfiguration erfolgt über die Option init - alle erforderlichen Dateien und Verzeichnisse werden als Default im Heimatverzeichnis im Ordner ~/perl5/perlbrew angelegt.

$ perlbrew init
 
 Perlbrew environment initiated, required directories are created under

     /home/bob/perl5/perlbrew

  Well-done! Congratulations! Please add the following line to the end
 of your ~/.bashrc

     source /home/bob/perl5/perlbrew/etc/bashrc
 ...

Wer perlbrew in ein anderes Verzeichnis installieren möchte, setzt dazu die Umgebungsvariable PERLBREW_ROOT:

$ export PERLBREW_ROOT=/opt/perlbrew
$ perlbrew install

Nach dem die o.g. Änderungen in der Datei ~/.bashrc ausgeführt wurden, aus der Shell abmelden und erneut einloggen, damit die Änderungen wirksam werden.

 

Mehrere Perls installieren

Mittels perlbrew install kann ein neues Perl installiert werden. Optionen, welche die Konfiguration des neuen Perls beeinflußen, werden über den Schalter -D= eingestellt. Die möglichen Optionen lassen sich der Datei INSTALL des jeweiligen Perls entnehmen.

Hier ein Perl 5.12.1 mit Threads:

$ perlbrew install perl-5.12.1 -D=usethreads

 Attempting to load conf from /home/bob/perl5/perlbrew/Conf.pm
 Fetching perl-5.12.1 as /home/bob/perl5/perlbrew/dists/perl-5.12.1.tar.gz
 Installing perl-5.12.1 into /home/bob/perl5/perlbrew/perls/perl-5.12.1
 This could take a while. You can run the following command on another shell to track the status:

  tail -f /home/bob/perl5/perlbrew/build.log

 (cd /home/bob/perl5/perlbrew/build; tar xzf /home/bob/perl5/perlbrew/dists/perl-5.12.1.tar.gz;cd /home/bob/perl5/perlbrew/build/perl-5.12.1;rm -f config.sh Policy.sh;sh Configure -de -Dprefix=/home/bob/perl5/perlbrew/perls/perl-5.12.1 -Dusethreads;make;make test && make install) >> '/home/bob/perl5/perlbrew/build.log' 2>&1 

 Installed perl-5.12.1 as perl-5.12.1 successfully. Run the following command to switch to it.

  perlbrew switch perl-5.12.1

Hier ein Perl 5.12.1 mit Standard-Optionen, also ohne Threads - über den Schalter -as wird ein passender Name für dieses Perl gewählt.

$ perlbrew install perl-5.12.1 -as perl-5.12.1-nothreads

 Attempting to load conf from /home/bob/perl5/perlbrew/Conf.pm
 Use the previously fetched perl-5.12.1.tar.gz
 Installing perl-5.12.1 into /home/bob/perl5/perlbrew/perls/perl-5.12.1-nothreads
 This could take a while. You can run the following command on another shell to track the status:

   tail -f /home/bob/perl5/perlbrew/build.log

 (cd /home/bob/perl5/perlbrew/build; tar xzf /home/bob/perl5/perlbrew/dists/perl-5.12.1.tar.gz;cd /home/bob/perl5/perlbrew/build/perl-5.12.1;rm -f config.sh Policy.sh;sh Configure -de -Dprefix=/home/bob/perl5/perlbrew/perls/perl-5.12.1-nothreads;make;make test && make install) >> '/home/bob/perl5/perlbrew/build.log' 2>&1 
 Installed perl-5.12.1 as perl-5.12.1-nothreads successfully. Run the following command to switch to it.

  perlbrew switch perl-5.12.1-nothreads
 

Hier ein Perl 5.12.1 mit Standard-Optionen, also ohne Threads, aber mit Debugging-Informationen.

$ perlbrew install perl-5.12.1 -D=DEBUGGING=both -as perl-5.12.1-nothreads-debug
 
 Attempting to load conf from /home/bob/perl5/perlbrew/Conf.pm
 Use the previously fetched perl-5.12.1.tar.gz
 Installing perl-5.12.1 into /home/bob/perl5/perlbrew/perls/perl-5.12.1-nothreads-debug
 This could take a while. You can run the following command on another shell to track the status:

  tail -f /home/bob/perl5/perlbrew/build.log

 (cd /home/bob/perl5/perlbrew/build; tar xzf /home/bob/perl5/perlbrew/dists/perl-5.12.1.tar.gz;cd /home/bob/perl5/perlbrew/build/perl-5.12.1;rm -f config.sh Policy.sh;sh Configure -de -Dprefix=/home/bob/perl5/perlbrew/perls/perl-5.12.1-nothreads-debug -DDEBUGGING=both;make;make test && make install) >> '/home/bob/perl5/perlbrew/build.log' 2>&1 

 Installed perl-5.12.1 as perl-5.12.1-nothreads-debug successfully. Run the following command to switch to it.

  perlbrew switch perl-5.12.1-nothreads-debug

Hier ein Perl 5.12.1 mit Threads und Debugging-Informationen.

$ perlbrew install perl-5.12.1 -D=DEBUGGING=both -D=usethreads -as perl-5.12.1-debug
 
 Attempting to load conf from /home/bob/perl5/perlbrew/Conf.pm
 Use the previously fetched perl-5.12.1.tar.gz
 Installing perl-5.12.1 into /home/bob/perl5/perlbrew/perls/perl-5.12.1-debug
 This could take a while. You can run the following command on another shell to track the status:

   tail -f /home/bob/perl5/perlbrew/build.log

 (cd /home/bob/perl5/perlbrew/build; tar xzf /home/bob/perl5/perlbrew/dists/perl-5.12.1.tar.gz;cd /home/bob/perl5/perlbrew/build/perl-5.12.1;rm -f config.sh Policy.sh;sh Configure -de -Dprefix=/home/bob/perl5/perlbrew/perls/perl-5.12.1-debug -DDEBUGGING=both -Dusethreads;make;make test && make install) >> '/home/bob/perl5/perlbrew/build.log' 2>&1 
 Installed perl-5.12.1 as perl-5.12.1-debug successfully. Run the following command to switch to it.

   perlbrew switch perl-5.12.1-debug

 

Zwischen den verschiedenen Perls hin- und herschalten

Zunächst werfen wir einen Blick auf das System-Perl:

$ perl -v

This is perl, v5.10.1 (*) built for i486-linux-gnu-thread-multi

Ein Übersicht aller installierten Perls liefert die Option installed

$ perlbrew installed
 perl-5.12.1
 perl-5.12.1-debug
 perl-5.12.1-nothreads
 perl-5.12.1-nothreads-debug
 /usr/bin/perl

Über die Option switch kann auf ein anderes Perl umgeschaltet werden. Da perlbrew die Umgebungsvariable PATH verändert, ist es zwingend erforderlich, die Shell über diese Änderung per hash -r (manchmal auch rehash) zu informieren.

$ perlbrew switch perl-5.12.1
$ hash -r 
$ perl -v

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

Zurück zum System-Perl gelangt man über die Option off:

$ perlbrew off
$ hash -r
$ perl -v

This is perl, v5.10.1 (*) built for i486-linux-gnu-thread-multi

 

CPAN-Module installieren

Wie bereits erwähnt, verändert perlbrew beim Switchen die Umgebungsvariable PATH und setzt zusätzlich das richtige cpan-Programm in diesen Pfad.

$ perlbrew switch perl-5.12.1-nothreads
$ hash -r

$ cpan 
cpan> install YAML
...
Appending installation info to /home/bob/perl5/perlbrew/perls/perl-5.12.1-nothreads/lib/5.12.1/i686-linux/perllocal.pod
cpan> quit

$ perlbrew off
$ hash -r

oder auch:

$ perlbrew switch perl-5.12.1-nothreads
$ hash -r

$ perl -MCPAN -e shell 
...

 

That's it.

 

Siehe auch

 

Das CPAN Testers Project möchte möglichst viele CPAN-Module auf möglichst vielen Plattformen testen. Diese Testergebnisse bieten CPAN-Autoren und Nutzern wertvolles Feedback und helfen die Qualität der CPAN-Module zu verbessern und somit den Wert des CPAN zu erhöhen.

Dank des CPAN-Moduls CPAN::Reporter von David Golden kann jeder, der ein Modul auf seinem Rechner installiert, einen Test-Report automatisch erzeugen und zu den CPAN-Testern übermitteln.

Wegen des starken Wachstums des CPAN-Testers Projects in den letzten Jahren ist eine neue leistungsfähige skalierbare Lösung erforderlich.

Seit dem 5. Juli 2010 steht CPAN Testers 2.0 zur Verfügung.

Die wesentlichen Neuerungen:

  • Test-Reports können auch über HTTP eingereicht werden.
  • Test-Reports, Tester und Distributionen werden über eine Meta-Datenbank verwaltet

Die alte Schnittstelle über SMTP wird am 31.08.2010 eingestellt.

 

Installation

CPAN::Reporter benötigt das Modul CPAN ab Version 1.9301 und weitere Module, wie z.B. Module::Build, in möglichst aktuellen Versionen - hier bietet sich ein allgemeines Update via Bundle::CPAN an. Weiterhin werden Module für den neuen Transportmechanismus über HTTP benötigt.

 cpan> install Bundle::CPAN
 cpan> reload CPAN
 
 cpan> install CPAN::Reporter
 cpan> install Test::Reporter
 cpan> install Test::Reporter::Transport::Metabase
 cpan> install Metabase::Client::Simple
 cpan> install Metabase::Fact
 

 

Konfiguration

Die Konfiguration erfolgt in zwei Schritten.

Im ersten Schritt werden einige einfache Fragen beantwortet und daraus eine grundlegende Konfiguration erzeugt.

 cpan> o conf init test_report

Zunächst wird festgelegt, ob die Testergebnisse zu den CPAN Testern versandt werden sollen.

 
 Email test reports if CPAN::Reporter is installed (yes/no)? [no] yes

 Would you like me configure CPAN::Reporter now? [yes] yes

Falls ja wird als nächstes die E-Mail Adresse des Test Reporters abgefragt. Wer über eine PAUSE-ID verfügt, trägt bitte die dort hinterlegte E-Mail-Adresse (pauseid@cpan.org) ein; ansonsten ist jede gültige Adresse okay.

 email_from? [] "Vorname Nachname" <e-mail@adresse.tld>

Die Testergebnisse wurden bisher an die Mailserver von perl.org gesandt werden. Da der Versand jetzt über HTTP erfolgt, bleibt dieses Feld einfach leer.

 smtp_server? [] 

Die Testergebnisse können vor dem Versand noch mit einem Editor bearbeitet werden. Als Tester kann man hier noch Hinweise für den Autor einfügen. Die vorgeschlagene Standardkonfiguration sendet die Reports im Erfolgsfall automatisch und fragt im Misserfolgsfall nach, ob der Report vor dem Versand editiert werden soll.

 edit_report? [default:ask/no pass/na:no] 

Nun muss die Konfiguration noch gespeichert werden.

 cpan> o conf commit

Die Konfigurationsdatei config.ini befindet sich im Heimatverzeichnis des aktuellen Benutzers im Unterverzeichnis .cpanreporter und kann mit einem beliebigen Text-Editor bearbeitet werden.

edit_report=default:ask/no pass/na:no
email_from="Thomas Fahle" <cpan@thomas-fahle.de>
send_report=default:ask/yes pass/na:yes

In diese Datei wird nun als zweiter Schritt der neue Transportmechanismus von Hand eingetragen.

email_from="Thomas Fahle" <cpan@thomas-fahle.de>
send_report=default:ask/yes pass/na:yes
edit_report=default:ask/no pass/na:no
transport = Metabase uri http://metabase.cpantesters.org/beta/ id_file /home/tf/.cpanreporter/metabase_id.json

Der Transportmechanismus erwartet eine Profildatei (id_file) mit einem Shared Secret.

Dieses Profil dient z.B. zu richtigen Zuordnung der Tests und Tester im CPAN Testers Leaderboard.

Wer bereits Tests zu den CPAN-Testern geliefert hat, erhält eine vorgefertigte Profildatei nach Anforderung per E-Mail.

Neue Tester (m/w) können die Profildatei einfach mit dem Kommandozeilentool metabase-profile erstellen:

$ metabase-profile

Enter full name: Thomas Fahle
Enter email address: cpan@thomas-fahle.de
Enter password/secret: 1234567890

Writing profile to 'metabase_id.json'

Diese Datei wird nun im Verzeichnis ~./cpanreporter abgelegt.

Da in dieser Datei das Passwort im Klartext steht, sollte man zu mindestens die Rechte für den Zugriff auf die Datei und auf das Verzeichnis .cpanreporter einschränken, z.B. chmod 600 metabase_id.json.

 

Hinweis zur Privatsphäre

Testberichte enthalten Informationen über das Testsystem, wie Umgebungsvariablen, Betriebssystem, installierte Bibliotheken usw.

Wer sich Sorgen um die Privatsphäre macht, sollte die Berichte zuvor editieren. Die dazu passende Konfiguration:

 edit_report=default:ask/yes pass/na:yes

 

Werde CPAN-Tester

Es ist wirklich einfach CPAN-Test-Reporter zu sein. Je größer das Netzwerk der Tester, um so besser. Werde CPAN-Test-Reporter.

 

Siehe auch

Das Modul Roman - Perl module for conversion between Roman and Arabic numerals - von Alexandr Ciornii vereinfacht die Umrechnung von Römische Zahlen in Indisch-Arabische Zahlen und umgekehrt.

Indisch-Arabische Zahlen in römische Zahlen umrechnen

Die automatisch exportierte Funktion Roman liefert römische Zahlen in Großbuchstaben. Wer kleine Buchstaben bevorzugt, verwendet statt dessen die (hier nicht gezeigte) Funktion roman.

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

my @arabic_numbers = ( 1 .. 10 );

foreach my $arabic (@arabic_numbers) {
    my $roman = Roman($arabic);
    printf( "%-5s %-5s\n", $arabic, $roman );
}

Das Programm erzeugt folgende Ausgabe:

1     I    
2     II   
3     III  
4     IV   
5     V    
6     VI   
7     VII  
8     VIII 
9     IX   
10    X  

 

Römische Zahlen in Indisch-Arabische Zahlen umrechnen

Die ebenfalls automatisch exportiert Funktion arabic rechnet römische Zahlen in Indisch-Arabische Zahlen um. isroman prüft, ob es sich auch wirklich um eine gültige römische Zahl handelt.

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

my @roman_numbers = qw( X XX L C CM MCD );

foreach my $roman (@roman_numbers) {
    if ( isroman($roman) ) {
        my $arabic = arabic($roman);
        printf( "%-5s %5s\n", $roman, $arabic );
    }
    else {
        warn "$roman ist keine gueltige roemische Zahl!\n";
    }
}

Das Programm erzeugt folgende Ausgabe:

X        10
XX       20
L        50
C       100
CM      900
MCD    1400

 

Datum in römischen Zahlen

Das nachfolgende Snippet habe ich im Blog von Ovid im Beitrag Dates in Latin gefunden und als Grundlage für ein kleines Programm verwendet:

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

use Roman;
use DateTime;

my $dt = DateTime->new(
    year      => 2010,
    month     => 06,
    day       => 7,
    time_zone => 'Europe/Berlin',
);

my $date           = latin_date($dt);
my $workshop_count = Roman(12);

print
    qq~Der $workshop_count. Deutsche Perl-Workshop in Schorndorf (bei Stuttgart)
       startet am "$date".\n~;

sub latin_date {

    # Quelle: http://blogs.perl.org/users/ovid/2010/05/dates-in-latin.html
    my $datetime = shift;
    my @days     = (
        'Dies Dominica',
        'Dies Lunae',
        'Dies Martis',
        'Dies Mercurii',
        'Dies Iovis',
        'Dies Veneris',
        'Dies Saturni',
        'Dies Dominica',
    );
    my @months = (
        'Januarius', 'Februarius', 'Martius',   'Aprilis',
        'Maius',     'Junius',     'Julius',    'Augustus',
        'September', 'October',    'Novembris', 'December'
    );
    return join ' ' => $days[ $datetime->day_of_week ],
        roman( $datetime->day ), $months[ $datetime->month - 1 ],
        uc( roman( $datetime->year ) );
}

Das Programm erzeugt folgende Ausgabe:

Der XII. Deutsche Perl-Workshop in Schorndorf (bei Stuttgart) 
startet am "Dies Lunae vii Junius MMX".

 

Siehe auch:

Über dieses Archiv

Diese Seite enthält aktuelle Einträge der Kategorie 101.

Blogs ist die nächste Kategorie.

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

Perl Suchmaschine

Blog Roll

Powered by Movable Type 4.1