PDA

Visualizza la versione completa : [Perl]Eseguire script


Aki
19-01-2005, 16:19
Ciao raga,
come faccio a richiamare ed eseguire uno script esterno?

del tipo, ho questo codice:


#!/usr/bin/perl

while(1)
{
print "Scegli cosa fare:\n";
print "\nInserisci\t\ti";
print "\nRicerca\t\tr";
print "\nAnnulla\t\tu";
print "\nLa scelta è: ";
$c=<STDIN>;
if($c=~/[nI]/)
if($c=~/[nR]/)
if($c=~/[uU]/){exit(0);}
}

per le due scelte "i" ed "r" (quelle in bold) vorrei che eseguisse 2 script esterni cioè "insert.pl" e "search.pl"
come posso fare?

Aki
19-01-2005, 16:22
Originariamente inviato da Aki
Ciao raga,
come faccio a richiamare ed eseguire uno script esterno?

del tipo, ho questo codice:


#!/usr/bin/perl

while(1)
{
print "Scegli cosa fare:\n";
print "\nInserisci\t\ti";
print "\nRicerca\t\tr";
print "\nAnnulla\t\tu";
print "\nLa scelta è: ";
$c=<STDIN>;
if($c=~/[nI]/)
if($c=~/[nR]/)
if($c=~/[uU]/){exit(0);}
}

per le due scelte "i" ed "r" (quelle in bold) vorrei che eseguisse 2 script esterni cioè "insert.pl" e "search.pl"
come posso fare?

se non erro ragionando potrei includere in subroutine tutti gli script esterni, ma in questo caso come le richiamo le sub?

Aki
19-01-2005, 16:46
ciao
ho risolto così:


#!/usr/bin/perl

while(1)
{
print "Scegli cosa fare:";
print "\nInserisci\t\ti";
print "\nRicerca\t\tr";
print "\nAnnulla\t\tu\n";
print "La scelta è: ";
$c=<STDIN>;
if($c=~/[iI]/){insert()}
if($c=~/[rR]/){print "Pippo";}
if($c=~/[uU]/){exit(0);}
}

sub insert()
{
print "\n\n\t\tNuovo Utente\n\n";
print "\n\nInserisci nome e cognome:\t";
$nome=<STDIN>;
chop $nome;
print "\n\nInserisci il numero telefonico:\t";
$numero=<STDIN>;
chop $numero;
print "\n\nInserisci l'indirizzo:\t";
$indirizzo=<STDIN>;
open FILE,">>./agenda.dat";
print FILE "$nome:$numero:$indirizzo";
}

Johnny_Depp
19-01-2005, 17:11
se non ricordo male (sono un pò di anni che ho accantonato il PERL), per chiamare routine presenti in file differenti si fa così:


# file principale "main.pl"

#!/usr/bin/perl

while(1)
{
print "Scegli cosa fare:";
print "\nInserisci\t\ti";
print "\nRicerca\t\tr";
print "\nAnnulla\t\tu\n";
print "La scelta è: ";
$c=<STDIN>;
if($c=~/[iI]/){
require "my_insert.pl";
&my_insert;
}
if($c=~/[rR]/){
print "Pippo";
}
if($c=~/[uU]/){
exit(0);
}
}



# file esterno "my_insert.pl"

sub my_insert()
{
print "\n\n\t\tNuovo Utente\n\n";
print "\n\nInserisci nome e cognome:\t";
$nome=<STDIN>;
chop $nome;
print "\n\nInserisci il numero telefonico:\t";
$numero=<STDIN>;
chop $numero;
print "\n\nInserisci l'indirizzo:\t";
$indirizzo=<STDIN>;
open FILE,">>./agenda.dat";
print FILE "$nome:$numero:$indirizzo";
}
1;
P.S. per parlare di PERL c'è il forum apposito.
Sposto il thread.

Aki
20-01-2005, 08:28
Originariamente inviato da Johnny_Depp
se non ricordo male (sono un pò di anni che ho accantonato il PERL), per chiamare routine presenti in file differenti si fa così:


...



...
P.S. per parlare di PERL c'è il forum apposito.
Sposto il thread.

ok grassie

:ciauz:

shishii
20-01-2005, 11:59
Non facciamo confusione tra due cose molto diverse:

1- utilizzare codice perl contenuto in subroutine interne, o in file esterni.

2- utilizzare programmi esterni che siano scritti in perl o altro.

Nel primo caso si può usare il metodo della subroutine interna:




codice perl...
miafunzione(parametri);
....
sub miafunzione {
@parametri = @_
....
return qualcosa;
}


o richiamare codice contenuto in file esterni con il comando require come suggerito, oppure creando un modulo e utilizzando
use NomeModulo;

Nel secondo caso invece si deve invocare il programma esterno creando un altro processo, fornendogli l'input se richiesto e ricevendo l'output. I metodi possibili sono i seguenti:

$output = `programmaX parametri`;
questo metodo esegue il programma esterno passandogli in input i parametri e conserva l'output nella variabile $output. Fatto ciò continua l'esecuzione dello script.

system("programma", "parametri");
esegue il programma esterno senza ricevere l'output e prosegue nella sua esecuzione.

exec("programma parametri");
esegue il programma esterno e cessa la propria esecuzione.

Loading