Newsgroup: it.comp.lang.perl
Titolo: La scoperta.

Stamattina ho scoperto quel che accade a digitare "perl -MCPAN -e shell" 
sulla console. Mi hanno creato una directory /root/.cpam
dove hanno messo nuovi moduli, che credo di aver istallato, con tutte le 
loro dipendenze.. E quelli che da tempo già stanno in 
/usr/lib/perl5/ecc. che fine hanno fatto? Sicuro che siano tutti in 
path? In /etc/profile non ho visto nessuna variabile d' ambiente che 
definisca delle path per i moduli perl. Non posso ancora vedere se i 
nuovi funzionano perché ancora non ho trovato dove vengono elencati e 
descritti i comandi giusti per loro.
 
 
-- 
Qui si usa Linux
<b>
http://www.puppylinux.org
</b>
<b>
http://www.italianpuppy.org
</b>


Una specie di (c)pan di casa.
Oggi, dopo tentativi di intervenire sul misterioso array @INC cercando 
di aggiungerci una directory personale con "unshift @INC 
'/dir/personale`;" (si aggiunge solo temporaneamente) ho avuto successo
aggiungendo in path la mia directory 'personale' in /etc/profile e poi 
copiandoci vecchi listati autonomi trasformati in subroutine e 
rinominati 
file.pm
 (all'inizio dell'ultima riga deve figurare: "1;"). 
Funzionano in file normali (
file.pl
) dichiarando "use personale::file" 
senza l' estensione ".pm" all'inizio, chiamandone le funzioni (qui note 
perché fatte da me stesso) con "$var=funzione();" e infine usando la 
"$var". Nello stesso 
file.pl
 si posson usare anche più moduli.



La ricerca dei moduli avviene o con use lib <dir> all' interno di un 
programma o di un modulo
oppure usando la variabile d' ambiente PERL5LIB
 


In pratica: che bisogna scrivere per avere l'elenco di tutti i moduli
esistenti e disponibili sul pc? Saluti.


 esistenti e disponibili sul pc? Saluti.
 
perldoc perlmodlib
 
per vedere tutti i moduli in boundle con la tua distribuzione Perl.
Invece:
 
perldoc perllocal
 
per vedere tutti i moduli che ti sei installato in locale (con tanto
di data di installazione, versione ecc.)
 
Per il resto ti stai complicando la vita senza alcuna ragione: quello
che stai tentando di fare a manella, te lo fa già local::lib in
maniera automatica, pulita e corretta.
Basta *prima* installare local::lib, seguendo la procedura di
bootstrap:
 
https://metacpan.org/module/local::lib#The-bootstrapping-technique
 
 
poi riloggarsi e usare semplicemente cpan col proprio utente, e tutti
i moduli installati andranno a finire nella propria $HOME senza
toccare i moduli /di sistema/, e @INC verrà aggiornato automaticamente
per l'utente in questione.
 
Infine @INC lo pui ispezionare con:
 
perl -V
 
(e il suo valore dipenderà dall'utente).
 
Ciao.


Bene. Ho istallato manualmente (per semplificare, spesso i piatti 
precucinati sono più difficili da digerire delle pietanze al naturale)il 
modulo con tanto di opzione --bootstrap aggiunta.
Più tardi voglio proprio vedere che accadrà quando si istalleranno
moduli da cpan (se andranno da sé nella directori /root/perl5 che
s'è creata adesso con diverse sottodir), che accadrà alla misteriosa
@INC, e se i miei moduli caserecci, messi nei nuovi spazi, funzioneranno
da qualunque punto del file-system. Grazie mille, saluti. C'è ancora
tanta neve sporca per strada e questo non invita a uscire, ma pur si deve...


 tanta neve sporca per strada e questo non invita a uscire, ma pur si deve...
 
Coraggio, il peggio è passato ;-)

 Coraggio, il peggio è passato ;-)
Saluti e grazie.


 dove hanno messo nuovi moduli
 
Credo sia chiaro, ma per chi dovesse avere dubbi in proposito, in
questa directory non vengono installati i moduli, vengono solo
scompattati (temporaneamente) per la compilazione ed i test (cpan si
occupa in automatico di svuotarne il contenuto periodicamente, per non
farla diventare troppo grande - la dimensione massima è pure
configurabile).
 
Altra precisazione per chi dovesse leggerci in futuro: non c'è bisogno
di invocare "perl -MCPAN -e shell", ma semplicemente:
 
cpan
 
Ciao

 perl -I/root/perl5/lib 
prog.pl
 
 
Chiedo scusa per l'imprecisione, il path da utilizzare nei due esempi
precedenti è:
 
/root/perl5/lib/perl5
 


Grazie di tutte le indicazioni. Per il momento però credo,riguardo all' 
istallazione dei moduli, di aver raggiunto un buon compromesso con perl 
adottando la seguente prassi:
 
1°-digitare "perl -V" nella shell.
-appare finalmente chiaro il contenuto di @INC e quindi l'elenco
di tutte le directory ove validamente copiare i moduli. Prendiamo
nota della directory più accessibile e chiamiamola qui: DIRnA.
 
2°-andare col browser sul sito di CPAN e fare il download dei
moduli che ci interessano -sono in formato .tar.gz- e scompattarli in 
una DIRnB.
 
3°-dalla shell: cd DIRnB - perl Makefile.PL - make (non seguito da "make 
install"!)
Nella DIRnB adesso s'è creato un file FILEa.pm
 
4°-In DIRnA creare una directory DIRnC con un nome qualunque (breve).
5°-Dentro DIRnC copiare il file FILEa.pm
6°-Nello script di perl che userà il nuovo modulo questo deve apparire
come "use DIRnC::FILEa" (senza estensione ".pm").
7°-All' interno di DIRnC si possono mettere diversi FILEx.pm creando 
moduli diversi con uguale struttura "DIRnC::FILEx"
Il sistema cpan é nato evidentemente con lo scopo di facilitare la
vita all' "utente" perl, ma come a volte accade ai sistemi facilitatori, 
richiede più studio di quello che vuole evitare.
 
 
 
 
 

 richiede più studio di quello che vuole evitare.
 
Scusa, ma è tafazzismo (autolesionismo) allo stato puro (sei mica del PD?)
 
Confronta i tuoi *7* passi con questo semplice *unico* passo:
 
cpan Modulo::Da::Installare
 
che tra l'altro gestisce le dipendenze in maniera automatica, mentre tu dovresti fare pure quello a manella, potenzialmente moltiplicando per 100 i passi (e gli errori) per l'installazione di un singolo modulo /finale/.
 
Un'alternativa a cpan più flessibile è semmai (il già citato) App::cpanminus (che installa lo script cpanm), che ti permette con la stessa semplicità di fare diverse cose in più, come ad esempio evitare i test:
 
cpanm --notest Modulo::Da::Installare
 
tra l'altro funziona anche con un modulo scaricato in locale:
 
cpanm Modulo-Da-Installare-1.00.tar.gz
 
permettendoti di risparmiare almeno sei dei tuoi sette passi, se proprio volessi lavorare in quella maniera (e gestirebbe le dipendenze).
https://metacpan.org/module/cpanm
 

> Per il momento ..omissis...
Tutte le volte che ho provato cpan mi sono sempre imbattuto in quel 
passaggio in cui viene chiesto se sul pc si ha il brower "lynx".
Invece di affannarsi a cercare lynx per tutto il web uno non fa
altro che scaricarsi a mano il modulo e montarselo a piacere.
I sette passaggi sette sono un modo di sminuzzare l'argomento, ma in
realtà trovo questo sistema no-cpan di estrema naturalezza e quindi
rapidità. Certo le dipendenze servono, se si vogliono scrivere cose
complesse sarebbe molto più utile se invece di avere tutti i moduli
bell'e pronti si avesse una informazione più chiara delle funzioni
loro e delle dipendenze che richiedono. Comunque non nutro affatto
odio "ideologico", almeno verso cpan. A parte "lynx" e qualche altra 
cosa che sempre gli manca è un bell'esempio di apparente magia.
Saluti.

 cosa che sempre gli manca è un bell'esempio di apparente magia.
 
Allora usa cpanm: ha tutta la magia che vuoi ed anche di più: zero configurazione e funziona tutto fin dal primo colpo.
 
Ripeto:
https://metacpan.org/module/cpanm
 
 
Ciao

 cpanm --scandeps Modulo:Da::Installare
Essenziale informazione. Perň, per non rischiare di
infarcire troppo il mio attuale puppylinux (4.31) andrň
senz'altro a vedere come funziona "in corpore vili", cioč
su un altro computer che ho apposta in cantina (via onde
convogliate: D-Link dhp-200) per esperimenti piů duri.
Si tratta di ripercorrere tutto il percorso di istallazione
di cpan, lynx compreso (sono curioso di vedere a che serve
la sua finora inutilmente invocata presenza). Saluti.