2015-10-16 1 views
0

Après avoir cherché dans les environs, j'ai trouvé cette commande exec($^X, $0, @ARGV); qui redémarre un script Perl. Cependant quand je fais ceci mon manuscrit s'exécute normalement mais a Content-Type: text/html en face de la sortie prévue. Je me demandais si c'était la bonne façon de redémarrer mon script perl cgi.Redémarrage du script perl cgi

EDIT:

elsif (defined param("again")){ 
    exec($^X, $0, @ARGV); 
    exit; 
} 

Lorsque le script redémarre il est censé imprimer My guess is: 50 mais il imprime Content-Type: text/html My guess is: 50

+1

Sans plus d'informations, c'est difficile à dire. Mais probablement pas. Faites marche arrière un peu et expliquez votre problème et ce que vous avez essayé comme solution, et nous pourrions être en mesure de donner une réponse. Voir [ask] – Sobrique

+0

@Sobrique Mon problème est de redémarrer le script et la solution que j'ai essayée est 'exec ($^X, $ 0, @ARGV);' – gettingthere

+0

Cela ressemble énormément à un [problème XY] (http: // meta.stackexchange.com/questions/66377/what-is-the-xy-problem) - cela n'a pas beaucoup de sens de redémarrer un script comme ça, surtout pas dans un contexte 'cgi' où les scripts sont générés par votre httpd. – Sobrique

Répondre

2

La première fois que vous la sortie, il est utilisé comme un en-tête (et non affiché), la deuxième fois dans le cadre du contenu.

Ajoutez un paramètre à @ARGV pour pouvoir vérifier si le script a déjà été redémarré et si l'en-tête ne doit plus être envoyé.

EDIT: Je viens de voir quelle est votre utilisation prévue pour ce script. Dans un contexte de jeu en ligne, il serait bien sûr préférable d'actualiser, de rediriger ou simplement de fournir un lien ou une soumission de formulaire pour relancer le script.

Des solutions comme celle-ci, où vous redémarrez un script (ou en exécutiez une autre) dans la même connexion http, ont du sens pour les scripts de travail ou de surveillance, par exemple pour réduire l'empreinte mémoire. Mais c'est un animal très rarement vu.