CPAN: Unterschied zwischen den Versionen

Aus FHEMWiki
(Die Seite wurde neu angelegt: „Das CPAN, Comprehensive Perl Archive Network, ist ein weltweit verteiltes Netzwerk für Perl-Module, das seit 1995 besteht und aktuell etwa 200 000 Module umfa…“)
 
Keine Bearbeitungszusammenfassung
Zeile 1: Zeile 1:
= CPAN =
Das CPAN, Comprehensive Perl Archive Network, ist ein weltweit verteiltes Netzwerk für Perl-Module, das seit 1995 besteht und aktuell etwa 200 000 Module umfasst.
Das CPAN, Comprehensive Perl Archive Network, ist ein weltweit verteiltes Netzwerk für Perl-Module, das seit 1995 besteht und aktuell etwa 200 000 Module umfasst.


Siehe auch hier eine [https://www.cpan.org/modules/INSTALL.html Zusammenfassung des CPAN-Projektes].
Siehe auch hier eine [https://www.cpan.org/modules/INSTALL.html Zusammenfassung des CPAN-Projektes].
==Clients==
 
===Plattformunabhängig===
== Clients ==
 
=== Plattformunabhängig ===
 
Das CPAN bietet drei plattformunabhängige Clients an, von denen zwei hier beschrieben werden. Die ''Empfehlung'' ist, <code>cpanm</code> zu nutzen.
Das CPAN bietet drei plattformunabhängige Clients an, von denen zwei hier beschrieben werden. Die ''Empfehlung'' ist, <code>cpanm</code> zu nutzen.
====cpanminus====
 
==== cpanminus ====
 
[https://metacpan.org/pod/distribution/App-cpanminus/bin/cpanm cpanminus] (<code>cpanm</code>) ist der bevorzugte Weg, wie CPAN-Pakete installiert werden sollten. cpan-minus ist, wie <code>cpan</code> ein CPAN-Paket, das aber auch für viele Betriebssystem als fertiges Paket portiert wurde.
[https://metacpan.org/pod/distribution/App-cpanminus/bin/cpanm cpanminus] (<code>cpanm</code>) ist der bevorzugte Weg, wie CPAN-Pakete installiert werden sollten. cpan-minus ist, wie <code>cpan</code> ein CPAN-Paket, das aber auch für viele Betriebssystem als fertiges Paket portiert wurde.


cpan-minus bietet einen [http://cpanmin.us/ Quickstart] an, der auf jedem System läuft, auf dem Perl installiert ist. Dazu muss folgender Befehl auf der Kommandozeile ausgeführt werden:<pre>curl -L https://cpanmin.us | perl - App::cpanminus</pre>Aus Sicherheitsgründen sollte vor Ausführung des Befehls überprüft werden, was unter [http://cpanmin.us/ cpanmin.us] zu finden ist, da ggf. Schadcode unbemerkt eingeschmuggelt werden könnte.
cpan-minus bietet einen [http://cpanmin.us/ Quickstart] an, der auf jedem System läuft, auf dem Perl installiert ist. Dazu muss folgender Befehl auf der Kommandozeile ausgeführt werden:
 
<pre>curl -L https://cpanmin.us | perl - App::cpanminus</pre>
Aus Sicherheitsgründen sollte vor Ausführung des Befehls überprüft werden, was unter [http://cpanmin.us/ cpanmin.us] zu finden ist, da ggf. Schadcode unbemerkt eingeschmuggelt werden könnte.
 
Ist der Client <code>cpanm</code> installiert, kann mit
 
<pre>cpanm Paket::Name</pre>
ein Paket (in diesem Falle das nicht-existende Paket <code>Paket::Name</code>) installiert werden. Die Option <code>--sudo</code> sorgt dafür, dass cpanminus die Installation als Superuser versucht (ggf. muss ein Passwort eingegeben werden).
 
==== Exkurs: cpan-outdated ====


Ist der Client <code>cpanm</code> installiert, kann mit<pre>cpanm Paket::Name</pre>ein Paket (in diesem Falle das nicht-existende Paket <code>Paket::Name</code>) installiert werden. Die Option <code>--sudo</code> sorgt dafür, dass cpanminus die Installation als Superuser versucht (ggf. muss ein Passwort eingegeben werden).
Das Paket [https://metacpan.org/pod/distribution/cpan-outdated/script/cpan-outdated <code>cpan-outdated</code>] erzeugt eine cpanminus-kompatible Liste an CPAN-Paketen, die aktualisiert werden können, z.B.
====Exkurs: cpan-outdated====
 
Das Paket [https://metacpan.org/pod/distribution/cpan-outdated/script/cpan-outdated <code>cpan-outdated</code>] erzeugt eine cpanminus-kompatible Liste an CPAN-Paketen, die aktualisiert werden können, z.B.<pre>$ cpan-outdated  
<pre>$ cpan-outdated  
A/AN/ANDK/CPAN-2.27.tar.gz
A/AN/ANDK/CPAN-2.27.tar.gz
L/LE/LEONT/Test-Harness-3.42.tar.gz
L/LE/LEONT/Test-Harness-3.42.tar.gz
Zeile 34: Zeile 51:
A/AT/ATOOMIC/Devel-PPPort-3.58.tar.gz
A/AT/ATOOMIC/Devel-PPPort-3.58.tar.gz
M/MS/MSHELOR/Digest-SHA-6.02.tar.gz
M/MS/MSHELOR/Digest-SHA-6.02.tar.gz
R/RJ/RJBS/Email-Sender-1.300034.tar.gz</pre>Sehr nützlich ist die Kombination aus cpanminus und cpan-outdated:<pre>cpan-outdated | cpanm --sudo</pre>Diese Befehlssequenz aktualisiert alle aktualisierbaren CPAN-Pakete mit Hilfe von cpanminus (als Superuser).
R/RJ/RJBS/Email-Sender-1.300034.tar.gz</pre>
====cpan====
Sehr nützlich ist die Kombination aus cpanminus und cpan-outdated:
[https://metacpan.org/pod/CPAN <code>cpan</code>] ist der mit jeder Perl-Installation mitgelieferte Client für das CPAN und lässt sich entweder mit<pre>perl -MCPAN -e shell</pre>oder<pre>cpan</pre>starten. Es wird ein interaktiver Client gestartet; mit <code>h</code> kann eine sehr umfangreiche Hilfe aufgerufen werden.


Ein Modul lässt sich am einfachsten mit<pre>cpan install PAKET::NAME</pre>installieren (hier das nicht-existente Paket <code>PAKET::NAME</code>). <code>cpan</code> eignet sich weniger gut um Module zu installieren oder zu aktualisieren, aber sehr gut um nach Paketen zu suchen:<pre>i /JSON/</pre>findet jedes Paket, das die Zeichenkette <code>JSON</code> im Bereich Autor, Bundle, Distribution oder Modul enthält. Das sind meist viele Ergebnisse, aber liefert einen Überblick &quot;was geht&quot;.
<pre>cpan-outdated | cpanm --sudo</pre>
Diese Befehlssequenz aktualisiert alle aktualisierbaren CPAN-Pakete mit Hilfe von cpanminus (als Superuser).
 
==== cpan ====
 
[https://metacpan.org/pod/CPAN <code>cpan</code>] ist der mit jeder Perl-Installation mitgelieferte Client für das CPAN und lässt sich entweder mit
 
<pre>perl -MCPAN -e shell</pre>
oder
 
<pre>cpan</pre>
starten. Es wird ein interaktiver Client gestartet; mit <code>h</code> kann eine sehr umfangreiche Hilfe aufgerufen werden.
 
Ein Modul lässt sich am einfachsten mit
 
<pre>cpan install PAKET::NAME</pre>
installieren (hier das nicht-existente Paket <code>PAKET::NAME</code>). <code>cpan</code> eignet sich weniger gut um Module zu installieren oder zu aktualisieren, aber sehr gut um nach Paketen zu suchen:
 
<pre>i /JSON/</pre>
findet jedes Paket, das die Zeichenkette <code>JSON</code> im Bereich Autor, Bundle, Distribution oder Modul enthält. Das sind meist viele Ergebnisse, aber liefert einen Überblick &quot;was geht&quot;.


Erfahrungsgemäß ist <code>cpan</code> recht störrisch in der Handhabung. Deshalb empfehle ich die Nutzung von cpanminus.
Erfahrungsgemäß ist <code>cpan</code> recht störrisch in der Handhabung. Deshalb empfehle ich die Nutzung von cpanminus.
===OS-Paketmanager===
 
====Debian und Derivate (Ubuntu, Raspbian, etc.)====
=== OS-Paketmanager ===
 
==== Debian und Derivate (Ubuntu, Raspbian, etc.) ====
 
Vom Debian-Projekt werden viele, aber lange nicht alle, Pakete des CPAN auch als Pakete für den eingebauten Paketmanager <code>apt</code> [https://packages.debian.org/stable/perl/ bereitsgestellt]. Dort sind momentan etwa 4 000 Pakete verfügbar, d.h. rund 2% der im CPAN verfügbaren Pakete. Es ist nicht immer trivial, ein Paket zu finden. Ein einfacher Fall ist z.B. das Paket <code>Readonly</code>, der über <code>cpanm Readonly</code> oder <code>apt-get install libreadonly-perl</code> installiert werden könnte. Im Allgemeinen kann man sagen, dass sich der Name des <code>apt</code>-Paketes aus dem Prefix <code>lib</code>, gefolgt vom Paketnamen in Kleinbuchstaben, bei dem die <code>::</code> durch <code>-</code> ersetzt wurden, und dem Suffix <code>-perl</code> zusammensetzt:
Vom Debian-Projekt werden viele, aber lange nicht alle, Pakete des CPAN auch als Pakete für den eingebauten Paketmanager <code>apt</code> [https://packages.debian.org/stable/perl/ bereitsgestellt]. Dort sind momentan etwa 4 000 Pakete verfügbar, d.h. rund 2% der im CPAN verfügbaren Pakete. Es ist nicht immer trivial, ein Paket zu finden. Ein einfacher Fall ist z.B. das Paket <code>Readonly</code>, der über <code>cpanm Readonly</code> oder <code>apt-get install libreadonly-perl</code> installiert werden könnte. Im Allgemeinen kann man sagen, dass sich der Name des <code>apt</code>-Paketes aus dem Prefix <code>lib</code>, gefolgt vom Paketnamen in Kleinbuchstaben, bei dem die <code>::</code> durch <code>-</code> ersetzt wurden, und dem Suffix <code>-perl</code> zusammensetzt:
{|
{|
!CPAN
! CPAN
!Debian-Paket
! Debian-Paket
|-
|-
|Rose::URI
| Rose::URI
|librose-uri-perl
| librose-uri-perl
|-
|-
|Sah::Schemas::Rinci
| Sah::Schemas::Rinci
|libsah-schemas-rinci-perl
| libsah-schemas-rinci-perl
|}Kein Beispiel wäre vollständig ohne Ausnahme, z.B.:
|}
 
Kein Beispiel wäre vollständig ohne Ausnahme, z.B.:


[https://metacpan.org/pod/distribution/Lingua-Romana-Perligata/lib/Lingua/Romana/Perligata.pm <code>libromana-perligata-perl</code>] installiert das Perl-Paket [https://metacpan.org/pod/distribution/Lingua-Romana-Perligata/lib/Lingua/Romana/Perligata.pm <code>Lingua::Romana::Perligata</code>], müsste nach der selbstgewählten Konvention aber <code>liblingua-romana-perligata-perl</code> heißen.
[https://metacpan.org/pod/distribution/Lingua-Romana-Perligata/lib/Lingua/Romana/Perligata.pm <code>libromana-perligata-perl</code>] installiert das Perl-Paket [https://metacpan.org/pod/distribution/Lingua-Romana-Perligata/lib/Lingua/Romana/Perligata.pm <code>Lingua::Romana::Perligata</code>], müsste nach der selbstgewählten Konvention aber <code>liblingua-romana-perligata-perl</code> heißen.
Zeile 60: Zeile 101:


Wiederum von Nachteil ist, dass man mit einer auf ein Release festgelegten Quelle irgendwann auch keine Updates der Perl-Pakete mehr enthält.
Wiederum von Nachteil ist, dass man mit einer auf ein Release festgelegten Quelle irgendwann auch keine Updates der Perl-Pakete mehr enthält.
====SuSE Linux====
 
==== SuSE Linux ====
 
YaST bietet aktuell etwa 3 121 der rund 200 000 Pakete in [https://build.opensuse.org/project/show/devel:languages:perl <code>devel:languages:perl</code>] an, dazu kommen noch einige Community-Pakete mit einer trivial nicht feststellbaren Anzahl an Paketen. Im Paket [https://build.opensuse.org/package/show/devel:languages:perl:CPAN-A/perl-App-cpanminus <code>perl-App-cpanminus</code>] ist <code>cpanm</code> enthalten.
YaST bietet aktuell etwa 3 121 der rund 200 000 Pakete in [https://build.opensuse.org/project/show/devel:languages:perl <code>devel:languages:perl</code>] an, dazu kommen noch einige Community-Pakete mit einer trivial nicht feststellbaren Anzahl an Paketen. Im Paket [https://build.opensuse.org/package/show/devel:languages:perl:CPAN-A/perl-App-cpanminus <code>perl-App-cpanminus</code>] ist <code>cpanm</code> enthalten.
====RedHat Linux====
 
====MacOS====
==== RedHat Linux ====
 
==== MacOS ====
 
Für MacOS gilt, dass das installierte Perl den <code>cpan</code>-Client und eine Auswahl an Module mitbringt. <code>cpanm</code> lässt sich installieren und sollte auch der Weg der Wahl sein. Es ist außerdem möglich, Pakete über [https://www.macports.org/ MacPorts] zu installieren. MacPorts bietet noch weniger Pakete (aktuell 1 797 für Perl 5.26, 1 799 für Perl 5.28) als Debian.
Für MacOS gilt, dass das installierte Perl den <code>cpan</code>-Client und eine Auswahl an Module mitbringt. <code>cpanm</code> lässt sich installieren und sollte auch der Weg der Wahl sein. Es ist außerdem möglich, Pakete über [https://www.macports.org/ MacPorts] zu installieren. MacPorts bietet noch weniger Pakete (aktuell 1 797 für Perl 5.26, 1 799 für Perl 5.28) als Debian.
====Windows====
 
==== Windows ====
 
[https://www.activestate.com/products/perl/downloads/ ActiveState] bietet eine Perl-Distribution an, die bereits mit einigen Module, 214 bei [https://platform.activestate.com/ActiveState/ActivePerl-5.28 Perl 5.28], ausgeliefert wird.
[https://www.activestate.com/products/perl/downloads/ ActiveState] bietet eine Perl-Distribution an, die bereits mit einigen Module, 214 bei [https://platform.activestate.com/ActiveState/ActivePerl-5.28 Perl 5.28], ausgeliefert wird.
==Empfohlene Pakete==
 
== Empfohlene Pakete ==
 
Im FHEM-Umfeld werden aktuell rund 120 CPAN-Pakete (mit Sub-Paketen) eingesetzt die keine [https://www.perl.com/article/what-is-the-perl-core-/ Core-Module] sind und ggf. für ein FHEM-Modul [[Meta|nachinstalliert]] werden müssen:
Im FHEM-Umfeld werden aktuell rund 120 CPAN-Pakete (mit Sub-Paketen) eingesetzt die keine [https://www.perl.com/article/what-is-the-perl-core-/ Core-Module] sind und ggf. für ein FHEM-Modul [[Meta|nachinstalliert]] werden müssen:
*Authen::OATH
 
*AutoLoader
* Authen::OATH
*B
* AutoLoader
*Carp
* B
*Color
* Carp
*Compress::Zlib
* Color
*Convert::Base32
* Compress::Zlib
*Cpanel::JSON::XS
* Convert::Base32
*Crypt::Argon2
* Cpanel::JSON::XS
*Crypt::CBC
* Crypt::Argon2
*Crypt::Cipher::AES
* Crypt::CBC
*Crypt::ECB
* Crypt::Cipher::AES
*Crypt::Mode::CBC
* Crypt::ECB
*Crypt::MySQL
* Crypt::Mode::CBC
*Crypt::NaCl::Sodium
* Crypt::MySQL
*Crypt::Rijndael
* Crypt::NaCl::Sodium
*Crypt::Rijndael_PP
* Crypt::Rijndael
*Crypt::URandom
* Crypt::Rijndael_PP
*DBI
* Crypt::URandom
*DBI::Const::GetInfoType
* DBI
*Data::Dumper
* DBI::Const::GetInfoType
*Data::UUID
* Data::Dumper
*Date::Parse
* Data::UUID
*DateTime
* Date::Parse
*Device::Firmata
* DateTime
*Device::Firmata::Base
* Device::Firmata
*Device::Firmata::Constants
* Device::Firmata::Base
*Device::Firmata::Error
* Device::Firmata::Constants
*Device::Firmata::Language
* Device::Firmata::Error
*Device::Firmata::Platform
* Device::Firmata::Language
*Device::Firmata::Protocol
* Device::Firmata::Platform
*Device::SerialPort
* Device::Firmata::Protocol
*Device::USB
* Device::SerialPort
*Digest::CRC
* Device::USB
*Digest::SHA1
* Digest::CRC
*Encode::Detect::Detector
* Digest::SHA1
*Expect
* Encode::Detect::Detector
*File::HomeDir
* Expect
*HTML::Entities
* File::HomeDir
*HTML::Parser
* HTML::Entities
*HTTP::Cookies
* HTML::Parser
*HTTP::Daemon
* HTTP::Cookies
*HTTP::Headers
* HTTP::Daemon
*HTTP::Request
* HTTP::Headers
*HTTP::Request::Common
* HTTP::Request
*IO::Interface::Simple
* HTTP::Request::Common
*IO::Socket::Multicast
* IO::Interface::Simple
*IO::Socket::Multicast6
* IO::Socket::Multicast
*IO::Socket::SSL
* IO::Socket::Multicast6
*IO::Socket::Timeout
* IO::Socket::SSL
*IO::String
* IO::Socket::Timeout
*Image::ExifTool
* IO::String
*Image::LibRSVG
* Image::ExifTool
*Image::Size
* Image::LibRSVG
*Inline
* Image::Size
*JSON
* Inline
*JSON::MaybeXS
* JSON
*JSON::XS
* JSON::MaybeXS
*JSON::backportPP
* JSON::XS
*JsonMod::JSON::Path::Node
* JSON::backportPP
*LWP
* JsonMod::JSON::Path::Node
*LWP::Simple
* LWP
*LWP::UserAgent~6
* LWP::Simple
*Linux::Inotify2
* LWP::UserAgent~6
*LiquidCrystal
* Linux::Inotify2
*Lirc::Client
* LiquidCrystal
*List::MoreUtils
* Lirc::Client
*MIME::Lite
* List::MoreUtils
*MP3::Info
* MIME::Lite
*MP3::Tag
* MP3::Info
*MP3::Tag::CDDB_File
* MP3::Tag
*MP3::Tag::Cue
* MP3::Tag::CDDB_File
*MP3::Tag::File
* MP3::Tag::Cue
*MP3::Tag::ID3v1
* MP3::Tag::File
*MP3::Tag::ID3v2
* MP3::Tag::ID3v1
*MP3::Tag::ImageExifTool
* MP3::Tag::ID3v2
*MP3::Tag::ImageSize
* MP3::Tag::ImageExifTool
*MP3::Tag::Inf
* MP3::Tag::ImageSize
*MP3::Tag::LastResort
* MP3::Tag::Inf
*MP3::Tag::ParseData
* MP3::Tag::LastResort
*Mail::IMAPClient
* MP3::Tag::ParseData
*Mojolicious~5.54
* Mail::IMAPClient
*Net::Address::IP::Local
* Mojolicious~5.54
*Net::Bonjour
* Net::Address::IP::Local
*Net::FTPSSL
* Net::Bonjour
*Net::Jabber
* Net::FTPSSL
*Net::MQTT::Constants
* Net::Jabber
*Net::MQTT::Message
* Net::MQTT::Constants
*Net::MQTT::Message::JustMessageId
* Net::MQTT::Message
*Net::Rendezvous
* Net::MQTT::Message::JustMessageId
*Net::SIP
* Net::Rendezvous
*Net::SIP::Packet
* Net::SIP
*Net::SMTP::SSL
* Net::SIP::Packet
*Net::Telnet
* Net::SMTP::SSL
*Net::UPnP::AV::MediaRenderer
* Net::Telnet
*Net::UPnP::AV::MediaServer
* Net::UPnP::AV::MediaRenderer
*Net::UPnP::ControlPoint
* Net::UPnP::AV::MediaServer
*Net::UPnP::Device
* Net::UPnP::ControlPoint
*Net::UPnP::Service
* Net::UPnP::Device
*Net::XMPP::Namespaces
* Net::UPnP::Service
*Nmap::Parser
* Net::XMPP::Namespaces
*Path::Tiny
* Nmap::Parser
*Paws::Polly
* Path::Tiny
*Perl::PrereqScanner::NotQuiteLite
* Paws::Polly
*RPC::XML::Client
* Perl::PrereqScanner::NotQuiteLite
*RPC::XML::Server
* RPC::XML::Client
*RiveScript
* RPC::XML::Server
*SOAP::Lite
* RiveScript
*Text::Iconv
* SOAP::Lite
*Try::Tiny
* Text::Iconv
*UPnP::Common
* Try::Tiny
*UPnP::ControlPoint
* UPnP::Common
*URI::Escape
* UPnP::ControlPoint
*WWW::Jawbone::Up
* URI::Escape
*Win32::SerialPort
* WWW::Jawbone::Up
*XML::LibXML
* Win32::SerialPort
*XML::Parser::Lite
* XML::LibXML
[https://raw.githubusercontent.com/fhem/doc-wiki/master/DE/Howtos/fhem-cpan-modules.txt Liste als plain text], z.B. um sie bein einer automatisierten Installation verwenden zu können. Die Liste wurde mit <code>Perl::PrereqScanner</code> aus dem <code>FHEM/</code>-Verzeichnis erstellt, durch <code>Core::List</code> gefiltert und mit <code>cpanm</code> auf Nicht-CPAN-Module (z.B. <code>FHEM::Meta</code> oder <code>DevIO</code>) geprüft.
* XML::Parser::Lite
 
[https://raw.githubusercontent.com/fhem/doc-wiki/master/DE/Howtos/fhem-cpan-modules.txt Liste als plain text], z.B. um sie bei einer automatisierten Installation verwenden zu können. Die Liste wurde mit <code>Perl::PrereqScanner</code> aus dem <code>FHEM/</code>-Verzeichnis erstellt, durch <code>Core::List</code> gefiltert und mit <code>cpanm</code> auf Nicht-CPAN-Module (z.B. <code>FHEM::Meta</code> oder <code>DevIO</code>) geprüft.
 
[[Kategorie:HOWTOS]] [[Kategorie:Systemadministration]] [[Kategorie:Perl]]

Version vom 13. Juni 2020, 20:21 Uhr

CPAN

Das CPAN, Comprehensive Perl Archive Network, ist ein weltweit verteiltes Netzwerk für Perl-Module, das seit 1995 besteht und aktuell etwa 200 000 Module umfasst.

Siehe auch hier eine Zusammenfassung des CPAN-Projektes.

Clients

Plattformunabhängig

Das CPAN bietet drei plattformunabhängige Clients an, von denen zwei hier beschrieben werden. Die Empfehlung ist, cpanm zu nutzen.

cpanminus

cpanminus (cpanm) ist der bevorzugte Weg, wie CPAN-Pakete installiert werden sollten. cpan-minus ist, wie cpan ein CPAN-Paket, das aber auch für viele Betriebssystem als fertiges Paket portiert wurde.

cpan-minus bietet einen Quickstart an, der auf jedem System läuft, auf dem Perl installiert ist. Dazu muss folgender Befehl auf der Kommandozeile ausgeführt werden:

curl -L https://cpanmin.us | perl - App::cpanminus

Aus Sicherheitsgründen sollte vor Ausführung des Befehls überprüft werden, was unter cpanmin.us zu finden ist, da ggf. Schadcode unbemerkt eingeschmuggelt werden könnte.

Ist der Client cpanm installiert, kann mit

cpanm Paket::Name

ein Paket (in diesem Falle das nicht-existende Paket Paket::Name) installiert werden. Die Option --sudo sorgt dafür, dass cpanminus die Installation als Superuser versucht (ggf. muss ein Passwort eingegeben werden).

Exkurs: cpan-outdated

Das Paket cpan-outdated erzeugt eine cpanminus-kompatible Liste an CPAN-Paketen, die aktualisiert werden können, z.B.

$ cpan-outdated 
A/AN/ANDK/CPAN-2.27.tar.gz
L/LE/LEONT/Test-Harness-3.42.tar.gz
B/BI/BINGOS/Archive-Tar-2.36.tar.gz
T/TO/TODDR/autodie-2.32.tar.gz
R/RU/RURBAN/B-Debug-1.26.tar.gz
I/IL/ILMARI/bareword-filehandles-0.007.tar.gz
P/PJ/PJACKLAM/bignum-0.51.tar.gz
X/XS/XSAWYERX/Carp-1.50.tar.gz
L/LE/LEEJO/CGI-4.47.tar.gz
A/AT/ATOOMIC/Clone-0.45.tar.gz
M/ML/MLEHMANN/common-sense-3.75.tar.gz
P/PM/PMQS/Compress-Raw-Bzip2-2.093.tar.gz
P/PM/PMQS/Compress-Raw-Zlib-2.093.tar.gz
P/PM/PMQS/IO-Compress-2.093.tar.gz
H/HM/HMBRAND/Config-Perl-V-0.31.tgz
A/AT/ATOOMIC/TimeDate-2.33.tar.gz
P/PM/PMQS/DB_File-1.853.tar.gz
H/HU/HURRICUP/Devel-Camelcadedb-v2019.1.tar.gz
P/PJ/PJCJ/Devel-Cover-1.36.tar.gz
A/AT/ATOOMIC/Devel-PPPort-3.58.tar.gz
M/MS/MSHELOR/Digest-SHA-6.02.tar.gz
R/RJ/RJBS/Email-Sender-1.300034.tar.gz

Sehr nützlich ist die Kombination aus cpanminus und cpan-outdated:

cpan-outdated | cpanm --sudo

Diese Befehlssequenz aktualisiert alle aktualisierbaren CPAN-Pakete mit Hilfe von cpanminus (als Superuser).

cpan

cpan ist der mit jeder Perl-Installation mitgelieferte Client für das CPAN und lässt sich entweder mit

perl -MCPAN -e shell

oder

cpan

starten. Es wird ein interaktiver Client gestartet; mit h kann eine sehr umfangreiche Hilfe aufgerufen werden.

Ein Modul lässt sich am einfachsten mit

cpan install PAKET::NAME

installieren (hier das nicht-existente Paket PAKET::NAME). cpan eignet sich weniger gut um Module zu installieren oder zu aktualisieren, aber sehr gut um nach Paketen zu suchen:

i /JSON/

findet jedes Paket, das die Zeichenkette JSON im Bereich Autor, Bundle, Distribution oder Modul enthält. Das sind meist viele Ergebnisse, aber liefert einen Überblick "was geht".

Erfahrungsgemäß ist cpan recht störrisch in der Handhabung. Deshalb empfehle ich die Nutzung von cpanminus.

OS-Paketmanager

Debian und Derivate (Ubuntu, Raspbian, etc.)

Vom Debian-Projekt werden viele, aber lange nicht alle, Pakete des CPAN auch als Pakete für den eingebauten Paketmanager apt bereitsgestellt. Dort sind momentan etwa 4 000 Pakete verfügbar, d.h. rund 2% der im CPAN verfügbaren Pakete. Es ist nicht immer trivial, ein Paket zu finden. Ein einfacher Fall ist z.B. das Paket Readonly, der über cpanm Readonly oder apt-get install libreadonly-perl installiert werden könnte. Im Allgemeinen kann man sagen, dass sich der Name des apt-Paketes aus dem Prefix lib, gefolgt vom Paketnamen in Kleinbuchstaben, bei dem die :: durch - ersetzt wurden, und dem Suffix -perl zusammensetzt:

CPAN Debian-Paket
Rose::URI librose-uri-perl
Sah::Schemas::Rinci libsah-schemas-rinci-perl

Kein Beispiel wäre vollständig ohne Ausnahme, z.B.:

libromana-perligata-perl installiert das Perl-Paket Lingua::Romana::Perligata, müsste nach der selbstgewählten Konvention aber liblingua-romana-perligata-perl heißen.

Vorteilhaft ist, dass man die Pakete zusammen mit anderen Debian-Paketen automatisch auf dem aktuellen Stand halten kann, z.B. unattended-upgrades - man spart so eine doppelte Implementierung der Updates.

Wiederum von Nachteil ist, dass man mit einer auf ein Release festgelegten Quelle irgendwann auch keine Updates der Perl-Pakete mehr enthält.

SuSE Linux

YaST bietet aktuell etwa 3 121 der rund 200 000 Pakete in devel:languages:perl an, dazu kommen noch einige Community-Pakete mit einer trivial nicht feststellbaren Anzahl an Paketen. Im Paket perl-App-cpanminus ist cpanm enthalten.

RedHat Linux

MacOS

Für MacOS gilt, dass das installierte Perl den cpan-Client und eine Auswahl an Module mitbringt. cpanm lässt sich installieren und sollte auch der Weg der Wahl sein. Es ist außerdem möglich, Pakete über MacPorts zu installieren. MacPorts bietet noch weniger Pakete (aktuell 1 797 für Perl 5.26, 1 799 für Perl 5.28) als Debian.

Windows

ActiveState bietet eine Perl-Distribution an, die bereits mit einigen Module, 214 bei Perl 5.28, ausgeliefert wird.

Empfohlene Pakete

Im FHEM-Umfeld werden aktuell rund 120 CPAN-Pakete (mit Sub-Paketen) eingesetzt die keine Core-Module sind und ggf. für ein FHEM-Modul nachinstalliert werden müssen:

  • Authen::OATH
  • AutoLoader
  • B
  • Carp
  • Color
  • Compress::Zlib
  • Convert::Base32
  • Cpanel::JSON::XS
  • Crypt::Argon2
  • Crypt::CBC
  • Crypt::Cipher::AES
  • Crypt::ECB
  • Crypt::Mode::CBC
  • Crypt::MySQL
  • Crypt::NaCl::Sodium
  • Crypt::Rijndael
  • Crypt::Rijndael_PP
  • Crypt::URandom
  • DBI
  • DBI::Const::GetInfoType
  • Data::Dumper
  • Data::UUID
  • Date::Parse
  • DateTime
  • Device::Firmata
  • Device::Firmata::Base
  • Device::Firmata::Constants
  • Device::Firmata::Error
  • Device::Firmata::Language
  • Device::Firmata::Platform
  • Device::Firmata::Protocol
  • Device::SerialPort
  • Device::USB
  • Digest::CRC
  • Digest::SHA1
  • Encode::Detect::Detector
  • Expect
  • File::HomeDir
  • HTML::Entities
  • HTML::Parser
  • HTTP::Cookies
  • HTTP::Daemon
  • HTTP::Headers
  • HTTP::Request
  • HTTP::Request::Common
  • IO::Interface::Simple
  • IO::Socket::Multicast
  • IO::Socket::Multicast6
  • IO::Socket::SSL
  • IO::Socket::Timeout
  • IO::String
  • Image::ExifTool
  • Image::LibRSVG
  • Image::Size
  • Inline
  • JSON
  • JSON::MaybeXS
  • JSON::XS
  • JSON::backportPP
  • JsonMod::JSON::Path::Node
  • LWP
  • LWP::Simple
  • LWP::UserAgent~6
  • Linux::Inotify2
  • LiquidCrystal
  • Lirc::Client
  • List::MoreUtils
  • MIME::Lite
  • MP3::Info
  • MP3::Tag
  • MP3::Tag::CDDB_File
  • MP3::Tag::Cue
  • MP3::Tag::File
  • MP3::Tag::ID3v1
  • MP3::Tag::ID3v2
  • MP3::Tag::ImageExifTool
  • MP3::Tag::ImageSize
  • MP3::Tag::Inf
  • MP3::Tag::LastResort
  • MP3::Tag::ParseData
  • Mail::IMAPClient
  • Mojolicious~5.54
  • Net::Address::IP::Local
  • Net::Bonjour
  • Net::FTPSSL
  • Net::Jabber
  • Net::MQTT::Constants
  • Net::MQTT::Message
  • Net::MQTT::Message::JustMessageId
  • Net::Rendezvous
  • Net::SIP
  • Net::SIP::Packet
  • Net::SMTP::SSL
  • Net::Telnet
  • Net::UPnP::AV::MediaRenderer
  • Net::UPnP::AV::MediaServer
  • Net::UPnP::ControlPoint
  • Net::UPnP::Device
  • Net::UPnP::Service
  • Net::XMPP::Namespaces
  • Nmap::Parser
  • Path::Tiny
  • Paws::Polly
  • Perl::PrereqScanner::NotQuiteLite
  • RPC::XML::Client
  • RPC::XML::Server
  • RiveScript
  • SOAP::Lite
  • Text::Iconv
  • Try::Tiny
  • UPnP::Common
  • UPnP::ControlPoint
  • URI::Escape
  • WWW::Jawbone::Up
  • Win32::SerialPort
  • XML::LibXML
  • XML::Parser::Lite

Liste als plain text, z.B. um sie bei einer automatisierten Installation verwenden zu können. Die Liste wurde mit Perl::PrereqScanner aus dem FHEM/-Verzeichnis erstellt, durch Core::List gefiltert und mit cpanm auf Nicht-CPAN-Module (z.B. FHEM::Meta oder DevIO) geprüft.