Newsgroup: it.comp.lang.perl
Titolo: POSIX::uname()

Ciao a tutti!
Ho da qualche giorno la curiosità di risolvere un problema dal quale
non ne vengo fuori:
lanciando la funzione in oggetto ottengo il seguente errore:
POSIX::uname not implemented on this architecture
Qualcuno sa da dove deriva la problematica? Non so quanto c'entri ma
la funzione uname di sistema funziona
benissimo, così come altre funzioni del modulo POSIX
Ho trovato il sorgente di questo modulo tra i miei sorgenti del perl
( 5.8.8), e se provo a compilare solamente la lib POSIX.pm ( sotto ext/
POSIX ) già in fase di creazione del Makefile ottengo un warning:
Note (probably harmless): No library found for -lposix
Note (probably harmless): No library found for -lcposix
In compenso, su un'altra macchina di analoga architettura, pur
ottenendo lo stesso errore, il comando funziona benissimo.
Grazie in anticipo a chiunque mi possa dare una "dritta"!!
Ciao
Mario

Menix wrote:

C'è poco da fare, se non è implementato non è implementato, non è che 
puoi compilare del codice inesistente ;-)
Certo però che è strano, POSIX::uname() è implementata perfino sotto 
Windows:
C:\Users\Emanuele>perl -MPOSIX -e "print join ' - ', uname"
Windows NT - Dell-9200 - 6.0 - Build 6000 - x86
Per curiosità, su che architettura sei? (Solaris?)
Ciao,
Emanuele.

 Windows:
Ed anche su CygWin!
$ perl -MPOSIX -e "print join ' - ', uname"
CYGWIN_NT-6.0 - Dell-9200 - 1.5.24(0.156/4/2) - 2007-01-31 10:57 - i686

Chiedo scusa.. dimenticavo di dire che la precedente installazione con
5.8.6 funzionava benissimo,
e funziona altrettanto bene ora in quanto ho lascitao il vecchio perl
installato, infatti:
/usr/bin/perl-5.8.6 -MPOSIX -e "print join ' - ', uname"
funziona mentre
/usr/bin/perl -MPOSIX -e "print join ' - ', uname"
da l'errore sopracitato
L'architettura è una x86_64 .. un normalissimo Sempron AMD su fedora
Core 4
La precedente installazione di perl (5.8.6) derivava da un RPM di
fedora,
il nuovo perl è un compilato ex novo da sorgente.. ho quindi pensato
ad una qualche direttiva di compilazione.. ma non ne sono ancora
venuto fuori.

 ad una qualche direttiva di compilazione..
... E credo abbia ragione tu.
Ho dato una rapidissima occhiata a POSIX.xs e sembra che debba essere 
definito il simbolo HAS_UNAME, altrimenti ad uname viene semplicemente 
assegnata la funzione che ritorna il messaggio di unimplemented.
Quindi ho dato un'occhiata altrettanto rapida a Config sembra che la 
variabile che definisce HAS_UNAME sia d_uname.
Prova ad eseguire:
perl -MConfig -e "print $Config{d_uname}"
se la variabile č settata dovresti ottenere "define".
Al momento non ho tempo di indagare oltre (né tantomeno di compilare 
perl), ma direi che si debba configurare perl con d_uname prima di 
compilarlo (strano perņ che non lo sia di default...)
Se riesco ad appurare qualcos'altro (non prima di lunedģ prossimo temo) 
ti faccio sapere.
Ciao,
Emanuele.

 Emanuele.
Esatto Emanuele!!!! Hai perfettamente ragione.
Non so per quale motivo ma nel config.h trovo la definizione di
HAS_UNAME commentata...
togliendo il commento e ricompilando il modulo POSIX tutto è andato
apposto.. ed il mio uname() funzia!!
Indagherò meglio anch'io.. almeno so dove sbattere la testa!!!
Grazie mille..
Mario