Newsgroup: it.comp.lang.perl
Titolo: Perl su RedHat 7.2

   Salve a tutti...
Sto riscontrando un curioso problema tentando di usare un mio vecchio 
script in perl su RH 7.2... Questo script usava fork per creare nuovi 
processi e la funzione waitpid per aspettare la loro fine... A questo 
punto, per definirmi tutti i simboletti necessari al funzionamento delle 
funzioni wait et similia io, all'inizio dello script richiedevo 
wait.ph
:
...
require `
wait.ph
`;
...
   Questa cosa ha sempre funzionato su RH 6.2 con tutte le versioni che 
sono riuscito ad installare li sopra... Adesso sono passato alla 7.2, e, 
provando a far girare quello stesso script mi risponde:
syntax error at /usr/lib/perl5/site_perl/5.6.0/i386-linux/
features.ph
 line 
149,
near ") ("
syntax error at /usr/lib/perl5/site_perl/5.6.0/i386-linux/
features.ph
 line 
155,
near "}"
Compilation failed in require at 
/usr/lib/perl5/site_perl/5.6.0/i386-linux/sys/
wait.ph
 line 5.
Compilation failed in require at 
/usr/lib/perl5/site_perl/5.6.0/i386-linux/
wait.ph
 line 3.
Compilation failed in require at ./
td_server.pl
 line 25.
...dove la linea 25 di 
td_server.pl
 e` dove vado a richiedere quell'header, 
ovviamente. Ho anche provato sia a rifare h2ph che ad upgradare il 
pacchetto perl che avevo (apt-rpm mi ha installato perl-5.6.1-26.72.3.rpm, 
prima c'era un 5.6.0)... Poiche` mi sembra un errore abbastanza grosso 
(possibile che non se ne sia accorto ancora nessuno ???) non e` che sto 
sbagliando io qualcosa ??? E che, per esempio, 
wait.ph
 sia stato obsoletato 
da qualche altro pacchetto ???
                                     Grazie in anticipo
                                        Rosario
-- 
                          |
\|/ ____ \|/   \ ||_|     |  Tutti mentono; ma non importa,
"@'/ ,. \`@"    \|| |     |  perché nessuno sta a sentire.
/_| \__/ |_\ Vax Headroom |
   \__U_/                 |          Legge di Lieberman

	!defined (defined(&__OPTIMIZE_SIZE__) ? &__OPTIMIZE_SIZE__ : 0)) {
Difficile pero` (per me, almeno) dire se sia realmente sufficiente.
Ciao.

 Difficile pero` (per me, almeno) dire se sia realmente sufficiente.
   Lo sarebbe se quello fosse l'unico file che contiene una cosa del 
genere... Purtroppo ce ne sono altri (per esempio in sys/cdefs.h <=> 
sys/
cdefs.ph
, oppure sys/types.h <=> sys/
types.ph
, inclusi dallo stesso 
wait.ph
 o da altri): non credo sia comodo andare a modificare tutti gli 
header di sistema e rilanciare h2ph per ognuno di loro 8^0... Poiche` mi 
sembra un errorino non da poco, mi pare anche strano che nessuno se ne sia 
accorto prima, sinceramente (ponendovi rimedio in maniera radicale)...
   Bah, se non si trova niente di meglio, mi sa che mi tocchera` farlo a 
mano... Argh... E se poi voglio far girare quello script su un'altra RH 
7.2?? Dovro` rifare tutto da capo ??? Ho come uno strano presentimento...
                                     Rosario
-- 
                          |    C'era un gran rumore negli
\|/ ____ \|/   \ ||_|     | universi. Generazioni di stelle
"@'/ ,. \`@"    \|| |     | nascevano e morivano sotto lo
/_| \__/ |_\ Vax Headroom | sguardo di telescopi assuefatti,
   \__U_/                 | 

accorto prima, sinceramente (ponendovi rimedio in maniera radicale)...
Tu lo chiami "errorino", e magari hai anche ragione, dal tuo punto di vista.
Il fatto e` pero` che si tratta di un caso abbastanza complesso. Si da, per
esempio, un'ambiguita` lessicale in un'espressione del genere:
  macro (qualcosa)
rispetto alla piu` immediata:
  macro(qualcosa)
Non e` immediatamente chiaro se (qualcosa) sia un parametro della macro o
questa vada prima espansa e quindi (qualcosa) assumera` un significato
nell'ambito dell'espressione espansa.
Il precompilatore C risolve probabilmente solo attraverso la piena
conoscenza della sintassi C. Ma portare h2ph alla piena conoscenza della
sintassi C vorrebbe dire, in sostanza, duplicare il parser C in perl.
Impresa che non e` poi delle piu` semplici, ne' forse delle piu`
giustificate.
Si puo` tentare qualcosa di meno radicale; da una brevissima e lacunosa
indagine, mi pare che un punto possibile d'intervento sia nella sub expr di
h2ph. Si puo` provare ad aggiungere una riga:
    s/^\s+//;
dopo:
    s/^([_a-zA-Z]\w*)//	&& do {
        my $id = $1;
oppure sostituire:
    } elsif (/^\(/) {
con:
    } elsif (/^\s*\(/) {
Se pero` questo risolve il problema di interpretazione della riga
incriminata, non e` affatto chiaro quali ripercussioni abbia sul resto.
Non escludo (e anzi, onestamente, mi attendo) che le cose siano
complessivamente peggiorate.
Ciao.

 complessivamente peggiorate.
   Beh, io ho provato a seguire l'altra strada (almeno temporaneamente) e 
cioe` quella di "correggere" gli header C incriminati e poi di rerunnare 
h2ph... Adesso la risposta, ancora piu` sconsolante, e`:
Undefined subroutine &main::WNOHANG called at ./
td_server.pl
 line 130.
   Adesso non arriva proprio a definire i "simboli" dell'header wait.h (in 
realta` si trovano, almeno nella mia versione, in sys/wait.h), anche se 
macina correttamente (senza errori di sintassi) tutti i .ph creati... 
Inizio ad essere un po' sconsolato...
                                         Rosario
PS - Eppure non devo essere stato il primo a scontrarmi con 'sti problemi...
-- 
                          |
\|/ ____ \|/   \ ||_|     |  Tutti mentono; ma non importa,
"@'/ ,. \`@"    \|| |     |  perché nessuno sta a sentire.
/_| \__/ |_\ Vax Headroom |
   \__U_/                 |          Legge di Lieberman

PS - Eppure non devo essere stato il primo a scontrarmi con 'sti problemi...
Scontrarsi con i problemi non basta: bisogna anche che qualcuno di quelli
che ci si scontrano (e probabilmente sono meno di quello che pensi) abbia
tempo, voglia e capacita' di costruire uno strumento migliore di h2ph (o
apportare le necessarie modifiche a h2ph). Cosi' evidentemente non e'
stato.
Ciao.