Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Probleme avec Perl Tk::...

5 réponses
Avatar
MyNeWs
Bonsoir,
j'ai un probleme que je n'arrive pas à résoudre. Merci à ceux qui ont une
solution ou une idée...

J'ai un script perl, en Tk qui me permet d'effectuer des recherches avec
Yahoo.
Lorsque le programme tourne en .pl, il n'y a pas de probleme, la connection
se fait et les données reviennent.
Lorsque je le convertis en .exe (Perl2Exe V8.80) j'ai un message d'erreur et
je n'ai aucun résultat en retour.
Voici un bout de script.
sub yahoo
{
#Variables Yahoo
################
my $my_search;
my @Results;
my $Result;

my $win_yahoo = MainWindow->new();
$win_yahoo->title("Search Yahoo");
$win_yahoo->maxsize (qw(300 100));
$win_yahoo->minsize (qw(300 100));
my
$menu_yahoo=$win_yahoo->Frame(-relief=>'raised',-borderwidth=>2)->pack(-fill=>'x');
my
$menuyahoo=$menu_yahoo->Menubutton(-foreground=>'blue',-text=>'Menu',-tearoff=>0,-menuitems=>[
['command'=>'Exit' ,-command=>sub {$win_yahoo -> DESTROY ();}]]);

my $cadre_yahoo = $win_yahoo->Frame->pack(-side=>'top');



my $cadre_yahoo2 = $win_yahoo->Frame->pack(-side=>'top');
$cadre_yahoo2->Label(-text=>'Search with Yahoo :
',-foreground=>'blue',-justify=>'right')->pack(-side=>
'left',-anchor=>'w',-expand => 1);
$cadre_yahoo2->Entry(-textvariable=>
\$my_search,-justify=>'left',-width=>'15')->pack(-side=>
'left',-anchor=>'w',-expand => 1);

my $nett=$win_yahoo->Photo(-file=> 'C:\\YAHOO\\IMAGES\\erase.bmp');
my $netto = $win_yahoo -> Button(-relief=>"flat",-image=>$nett,-command =>
sub {$my_search="";});
$netto->pack(-side => 'left' , -expand => 1);


my $val=$win_yahoo->Photo(-file=> 'C:\\YAHOO\\IMAGES\\valide.bmp');
my $valide_yahoo = $win_yahoo -> Button(
-relief=>"flat",
-image=>$val,
-command => sub {
my $resu="C:\\YAHOO\\RESULTATS\\Yahoo-$my_search.txt";
unlink $resu;

@Results = Yahoo::Search->Results(Doc => "$my_search",
AppId => "$argument",
# The following args are optional.
# (Values shown are package
defaults).
Mode => 'any', # all
words
Start => 0,
Count => 100,
Type => 'any', # all types
AllowAdult => 0, # no porn,
please
AllowSimilar => 0, # no dups,
please
Language => undef,
);

for $Result (@Results)
{
open (FIC,">>$resu") or die "I cannot find $resu";
printf FIC $Result->Title;
printf FIC "\n";
printf FIC $Result->ClickUrl;
printf FIC "\n\n";
close (FIC);
}
});
$valide_yahoo->pack(-side => 'right' , -expand => 1);
$menuyahoo->pack(-side=>'left');
}

Le message d'erreur que j'ai en retour (dés que je valide ma recherche) :
Tk::Error: panic: swash_fetch at PERL2EXE_STORAGE/URI.pm line 92.
Tk callback for .button1
Tk::__ANON__ at PERL2EXE_STORAGE/Tk.pm line 252
Tk::Button::butUp at PERL2EXE_STORAGE/Tk/Button.pm line 111
<ButtonRelease-1>
(command bound to event)


j'ai rajouter ces packages dans mon script, mais sans grand changements.
use URI;
use Tk::Text;
use Tk::Scrollbar;
use Tk::Button;


Si je rajoute celui ci
require Tk::ErrorDialog;

j'ai ceci en réponse :
Background Error: window ".errordialog.dialog" was deleted before its
visibility changed at PERL2EXE
_STORAGE/Tk/Widget.pm line 926.

Voila, si quelqu'un à une idée car la je pédale ...


Merci

--
"Moi, Adam et Ève, j'y crois plus tu vois, parce que je suis pas un idiot :
la pomme, ça peut pas être mauvais, c'est plein de pectine..." JC Vandamme

5 réponses

Avatar
jl_morel
Dans l'article <44bfd8ee$0$31764$, a
dit...

j'ai un probleme que je n'arrive pas à résoudre. Merci à ceux qui ont une
solution ou une idée...

J'ai un script perl, en Tk qui me permet d'effectuer des recherches avec
Yahoo.
Lorsque le programme tourne en .pl, il n'y a pas de probleme, la connection
se fait et les données reviennent.
Lorsque je le convertis en .exe (Perl2Exe V8.80) j'ai un message d'erreur et
je n'ai aucun résultat en retour.
Voici un bout de script.
[couic]


Le message d'erreur que j'ai en retour (dés que je valide ma recherche) :
Tk::Error: panic: swash_fetch at PERL2EXE_STORAGE/URI.pm line 92.
Tk callback for .button1
Tk::__ANON__ at PERL2EXE_STORAGE/Tk.pm line 252
Tk::Button::butUp at PERL2EXE_STORAGE/Tk/Button.pm line 111
<ButtonRelease-1>
(command bound to event)


j'ai rajouter ces packages dans mon script, mais sans grand changements.
use URI;
use Tk::Text;
use Tk::Scrollbar;
use Tk::Button;




Si le script marche mais que l'exécutable ne marche pas, c'est un problème
avec Perl2Exe et non pas avec Perl/Tk.

La difficulté pour les compilateurs comme Perl2Exe, PerlApp ou PAR, c'est
de trouver les modules utilisés par le script pour les mettre dans
l'exécutable. S'il en manque un, le programme ne tourne pas. Et si on met
tous les modules de la distribution, c'est trop gros !

Ce que vous pouvez faire, c'est ajouter le bout de code suivant à votre
script :

END {
print "n***** modules inclus:n";
local $, = "n";
print keys %INC;
}

Ensuite vous lancez votre script avec perl; vous essayez d'utiliser toutes
les options possibles s'il y en a (elles peuvent nécessiter le chargement
de modules à la volée). Finalement vous terminez votre script et il doit
vous afficher sur la console la liste des modules qu'il utilise.

Ensuite vous compilez votre script avec Perl2Exe et l'option verbose -v;
il va vous afficher la liste des modules qu'il inclut dans l'exécutable.
Vous comparez les deux listes et vous rajoutez des pragmas dans votre
script pour aider Perl2Exe.

Par exemple, s'il manque URI::http.pm et URI::ftp.pm, il faut rajouter les
pragmas :

#perl2exe_include URI::http
#perl2exe_include URI::ftp

Vous pouvez aussi lancer votre exécutable avec l'option -p2x_test pour
avoir des messages d'erreur plus explicites (?).

Bon courage.

--
J-L.M.
http://www.bribes.org/perl

Avatar
Yann Leguen
Merci pour votre aide.
Je vais tester cela.
Cordialement.

--
"Moi, Adam et Ève, j'y crois plus tu vois, parce que je suis pas un idiot :
la pomme, ça peut pas être mauvais, c'est plein de pectine..." JC Vandamme


"Jean-Louis MOREL" a écrit dans le message de news:
44c4f89d$0$6510$
Dans l'article <44bfd8ee$0$31764$, a
dit...

j'ai un probleme que je n'arrive pas à résoudre. Merci à ceux qui ont une
solution ou une idée...

J'ai un script perl, en Tk qui me permet d'effectuer des recherches avec
Yahoo.
Lorsque le programme tourne en .pl, il n'y a pas de probleme, la
connection
se fait et les données reviennent.
Lorsque je le convertis en .exe (Perl2Exe V8.80) j'ai un message d'erreur
et
je n'ai aucun résultat en retour.
Voici un bout de script.
[couic]


Le message d'erreur que j'ai en retour (dés que je valide ma recherche) :
Tk::Error: panic: swash_fetch at PERL2EXE_STORAGE/URI.pm line 92.
Tk callback for .button1
Tk::__ANON__ at PERL2EXE_STORAGE/Tk.pm line 252
Tk::Button::butUp at PERL2EXE_STORAGE/Tk/Button.pm line 111
<ButtonRelease-1>
(command bound to event)


j'ai rajouter ces packages dans mon script, mais sans grand changements.
use URI;
use Tk::Text;
use Tk::Scrollbar;
use Tk::Button;




Si le script marche mais que l'exécutable ne marche pas, c'est un problème
avec Perl2Exe et non pas avec Perl/Tk.

La difficulté pour les compilateurs comme Perl2Exe, PerlApp ou PAR, c'est
de trouver les modules utilisés par le script pour les mettre dans
l'exécutable. S'il en manque un, le programme ne tourne pas. Et si on met
tous les modules de la distribution, c'est trop gros !

Ce que vous pouvez faire, c'est ajouter le bout de code suivant à votre
script :

END {
print "n***** modules inclus:n";
local $, = "n";
print keys %INC;
}

Ensuite vous lancez votre script avec perl; vous essayez d'utiliser toutes
les options possibles s'il y en a (elles peuvent nécessiter le chargement
de modules à la volée). Finalement vous terminez votre script et il doit
vous afficher sur la console la liste des modules qu'il utilise.

Ensuite vous compilez votre script avec Perl2Exe et l'option verbose -v;
il va vous afficher la liste des modules qu'il inclut dans l'exécutable.
Vous comparez les deux listes et vous rajoutez des pragmas dans votre
script pour aider Perl2Exe.

Par exemple, s'il manque URI::http.pm et URI::ftp.pm, il faut rajouter les
pragmas :

#perl2exe_include URI::http
#perl2exe_include URI::ftp

Vous pouvez aussi lancer votre exécutable avec l'option -p2x_test pour
avoir des messages d'erreur plus explicites (?).

Bon courage.

--
J-L.M.
http://www.bribes.org/perl




Avatar
Yann Leguen
Bonsoir,
je viens d'ajouter le code en fin de mon script et effectivement j'ai pas
mal de msg .
je vous livre les quelques premieres lignes en brut :


le script en extension "pl":
***** modules inclus:
Tk/Canvas.pm
HTTP/Status.pm
ActiveState/Path.pm
Cwd.pm
Tk/Wm.pm
C:/Perl/site/lib/auto/Tk/getEncoding.al
Tk/Text.pm
Symbol.pm
C:/Perl/site/lib/auto/Tk/Widget/autosplit.ix
URI.pm
Exporter.pm
Tk/Photo.pm
C:/Perl/site/lib/auto/Tk/Scrollbar/autosplit.ix
Tk/Toplevel.pm
File/Spec.pm
warnings/register.pm
...
-----------------------------------------------

Le script en extension "exe"
***** modules inclus:
Tk/Canvas.pm
PERL2EXE_STORAGE/auto/Tk/Widget/autosplit.ix
HTTP/Status.pm
ActiveState/Path.pm
Cwd.pm
Tk/Wm.pm
PERL2EXE_STORAGE/auto/Tk/autosplit.ix
Tk/Text.pm
Symbol.pm
URI.pm
PERL2EXE_STORAGE/auto/Tk/Wm/autosplit.ix
Exporter.pm
Tk/Photo.pm
...

Là j'avoue mon ignorance . Pourriez vous me dire à quoi cela correspond et
comment éventuellement régler ces msg
d'erreur (si tenté que ce soient des msg d'erreur -PERL2EXE_STORAGE/...)

Merci
--
"Moi, Adam et Ève, j'y crois plus tu vois, parce que je suis pas un idiot :
la pomme, ça peut pas être mauvais, c'est plein de pectine..." JC Vandamme



"Jean-Louis MOREL" a écrit dans le message de news:
44c4f89d$0$6510$
Dans l'article <44bfd8ee$0$31764$, a
dit...

j'ai un probleme que je n'arrive pas à résoudre. Merci à ceux qui ont une
solution ou une idée...

J'ai un script perl, en Tk qui me permet d'effectuer des recherches avec
Yahoo.
Lorsque le programme tourne en .pl, il n'y a pas de probleme, la
connection
se fait et les données reviennent.
Lorsque je le convertis en .exe (Perl2Exe V8.80) j'ai un message d'erreur
et
je n'ai aucun résultat en retour.
Voici un bout de script.
[couic]


Le message d'erreur que j'ai en retour (dés que je valide ma recherche) :
Tk::Error: panic: swash_fetch at PERL2EXE_STORAGE/URI.pm line 92.
Tk callback for .button1
Tk::__ANON__ at PERL2EXE_STORAGE/Tk.pm line 252
Tk::Button::butUp at PERL2EXE_STORAGE/Tk/Button.pm line 111
<ButtonRelease-1>
(command bound to event)


j'ai rajouter ces packages dans mon script, mais sans grand changements.
use URI;
use Tk::Text;
use Tk::Scrollbar;
use Tk::Button;




Si le script marche mais que l'exécutable ne marche pas, c'est un problème
avec Perl2Exe et non pas avec Perl/Tk.

La difficulté pour les compilateurs comme Perl2Exe, PerlApp ou PAR, c'est
de trouver les modules utilisés par le script pour les mettre dans
l'exécutable. S'il en manque un, le programme ne tourne pas. Et si on met
tous les modules de la distribution, c'est trop gros !

Ce que vous pouvez faire, c'est ajouter le bout de code suivant à votre
script :

END {
print "n***** modules inclus:n";
local $, = "n";
print keys %INC;
}

Ensuite vous lancez votre script avec perl; vous essayez d'utiliser toutes
les options possibles s'il y en a (elles peuvent nécessiter le chargement
de modules à la volée). Finalement vous terminez votre script et il doit
vous afficher sur la console la liste des modules qu'il utilise.

Ensuite vous compilez votre script avec Perl2Exe et l'option verbose -v;
il va vous afficher la liste des modules qu'il inclut dans l'exécutable.
Vous comparez les deux listes et vous rajoutez des pragmas dans votre
script pour aider Perl2Exe.

Par exemple, s'il manque URI::http.pm et URI::ftp.pm, il faut rajouter les
pragmas :

#perl2exe_include URI::http
#perl2exe_include URI::ftp

Vous pouvez aussi lancer votre exécutable avec l'option -p2x_test pour
avoir des messages d'erreur plus explicites (?).

Bon courage.

--
J-L.M.
http://www.bribes.org/perl




Avatar
jl_morel
Dans l'article <44c9259f$0$7482$,
a dit...

Bonsoir,
je viens d'ajouter le code en fin de mon script et effectivement j'ai pas
mal de msg .
je vous livre les quelques premieres lignes en brut :


le script en extension "pl":
***** modules inclus:
Tk/Canvas.pm
HTTP/Status.pm
ActiveState/Path.pm
Cwd.pm
Tk/Wm.pm
C:/Perl/site/lib/auto/Tk/getEncoding.al
Tk/Text.pm
Symbol.pm
C:/Perl/site/lib/auto/Tk/Widget/autosplit.ix
URI.pm
Exporter.pm
Tk/Photo.pm
C:/Perl/site/lib/auto/Tk/Scrollbar/autosplit.ix
Tk/Toplevel.pm
File/Spec.pm
warnings/register.pm
...
-----------------------------------------------

Le script en extension "exe"
***** modules inclus:
Tk/Canvas.pm
PERL2EXE_STORAGE/auto/Tk/Widget/autosplit.ix
HTTP/Status.pm
ActiveState/Path.pm
Cwd.pm
Tk/Wm.pm
PERL2EXE_STORAGE/auto/Tk/autosplit.ix
Tk/Text.pm
Symbol.pm
URI.pm
PERL2EXE_STORAGE/auto/Tk/Wm/autosplit.ix
Exporter.pm
Tk/Photo.pm
...

Là j'avoue mon ignorance . Pourriez vous me dire à quoi cela correspond et
comment éventuellement régler ces msg
d'erreur (si tenté que ce soient des msg d'erreur -PERL2EXE_STORAGE/...)



Il n'y a pas de message d'erreur. PERL2EXE_STORAGE est le répertoire où
Perl2Exe stocke les modules dans l'exécutable.

Vous imprimez la première liste. Vous rayez de cette liste tous les modules
qui sont dans la deuxième liste. Par exemple, vous pouvez rayer
Tk/Canvas.pm et HTTP/Status.pm parce qu'ils sont dans la deuxième liste.
Vous rayez aussi C:/Perl/site/lib/auto/Tk/Widget/autosplit.ix car le module
est dans la deuxième liste : PERL2EXE_STORAGE/auto/Tk/Widget/autosplit.ix
(PERL2EXE_STORAGE correspond à C:/Perl/site/lib ou a C:/Perl/lib). Quand
vous avez rayé tous les modules qui sont dans la deuxième liste, ce qui
reste dans la première liste ce sont les modules à inclure avec un pragma.

Si vous trouvez ça rebutant, on peut procéder autrement.

Vous retirez le code END { ... } de la dernière fois et vous rajouter ce
bout de code tout en haut du script (juste après use strict; use warnings;)

push @INC, sub {
my (undef, $file) = @_;
if ( $file !~ /^PERL2EXE_STORAGE/ ) {
print "n AJOUTEZ LE PRAGMA :n";
print "#perl2exe_include "$file"nn";
}
return undef;
};

Ce bout de code place un mouchard à la fin de @INC. Si un module n'est pas
trouvé, la fonction anonyme dont la référence est placée sur @INC affiche
sur la console un pragma à ajouter, par exemple :
AJOUTEZ LE PRAGMA :
#perl2exe_include "Tk/Menubutton.pm"

J'ai testé ça sur un petit éditeur écrit en Perl/Tk. Il marche bien avec
perl mais ne marche plus une fois compilé avec Perl2Exe.
Il a fallu compiler et lancer l'exécutable quatre fois pour ajouter les
pragmas :
#perl2exe_include "Tk/Menubutton.pm"
#perl2exe_include "Tk/Photo.pm"
#perl2exe_include "Tk/Text.pm"
#perl2exe_include "Tk/Scrollbar.pm"

L'inconvénient de cette méthode c'est qu'il faut rajouter les modules un
par un, alors qu'avec la liste on les rajoute tous d'un coup.

À vous de voir.

--
J-L.M.
http://www.bribes.org/perl

Avatar
Yann Leguen
Et bien merci. C'est tres puissant ce petit script.
Merci encore.
Yann
--
"Moi, Adam et Ève, j'y crois plus tu vois, parce que je suis pas un idiot :
la pomme, ça peut pas être mauvais, c'est plein de pectine..." JC Vandamme



"Jean-Louis MOREL" a écrit dans le message de news:
44cb1878$0$8599$
Dans l'article <44c9259f$0$7482$,
a dit...

Bonsoir,
je viens d'ajouter le code en fin de mon script et effectivement j'ai pas
mal de msg .
je vous livre les quelques premieres lignes en brut :


le script en extension "pl":
***** modules inclus:
Tk/Canvas.pm
HTTP/Status.pm
ActiveState/Path.pm
Cwd.pm
Tk/Wm.pm
C:/Perl/site/lib/auto/Tk/getEncoding.al
Tk/Text.pm
Symbol.pm
C:/Perl/site/lib/auto/Tk/Widget/autosplit.ix
URI.pm
Exporter.pm
Tk/Photo.pm
C:/Perl/site/lib/auto/Tk/Scrollbar/autosplit.ix
Tk/Toplevel.pm
File/Spec.pm
warnings/register.pm
...
-----------------------------------------------

Le script en extension "exe"
***** modules inclus:
Tk/Canvas.pm
PERL2EXE_STORAGE/auto/Tk/Widget/autosplit.ix
HTTP/Status.pm
ActiveState/Path.pm
Cwd.pm
Tk/Wm.pm
PERL2EXE_STORAGE/auto/Tk/autosplit.ix
Tk/Text.pm
Symbol.pm
URI.pm
PERL2EXE_STORAGE/auto/Tk/Wm/autosplit.ix
Exporter.pm
Tk/Photo.pm
...

Là j'avoue mon ignorance . Pourriez vous me dire à quoi cela correspond et
comment éventuellement régler ces msg
d'erreur (si tenté que ce soient des msg d'erreur -PERL2EXE_STORAGE/...)



Il n'y a pas de message d'erreur. PERL2EXE_STORAGE est le répertoire où
Perl2Exe stocke les modules dans l'exécutable.

Vous imprimez la première liste. Vous rayez de cette liste tous les
modules
qui sont dans la deuxième liste. Par exemple, vous pouvez rayer
Tk/Canvas.pm et HTTP/Status.pm parce qu'ils sont dans la deuxième liste.
Vous rayez aussi C:/Perl/site/lib/auto/Tk/Widget/autosplit.ix car le
module
est dans la deuxième liste : PERL2EXE_STORAGE/auto/Tk/Widget/autosplit.ix
(PERL2EXE_STORAGE correspond à C:/Perl/site/lib ou a C:/Perl/lib). Quand
vous avez rayé tous les modules qui sont dans la deuxième liste, ce qui
reste dans la première liste ce sont les modules à inclure avec un pragma.

Si vous trouvez ça rebutant, on peut procéder autrement.

Vous retirez le code END { ... } de la dernière fois et vous rajouter ce
bout de code tout en haut du script (juste après use strict; use
warnings;)

push @INC, sub {
my (undef, $file) = @_;
if ( $file !~ /^PERL2EXE_STORAGE/ ) {
print "n AJOUTEZ LE PRAGMA :n";
print "#perl2exe_include "$file"nn";
}
return undef;
};

Ce bout de code place un mouchard à la fin de @INC. Si un module n'est pas
trouvé, la fonction anonyme dont la référence est placée sur @INC affiche
sur la console un pragma à ajouter, par exemple :
AJOUTEZ LE PRAGMA :
#perl2exe_include "Tk/Menubutton.pm"

J'ai testé ça sur un petit éditeur écrit en Perl/Tk. Il marche bien avec
perl mais ne marche plus une fois compilé avec Perl2Exe.
Il a fallu compiler et lancer l'exécutable quatre fois pour ajouter les
pragmas :
#perl2exe_include "Tk/Menubutton.pm"
#perl2exe_include "Tk/Photo.pm"
#perl2exe_include "Tk/Text.pm"
#perl2exe_include "Tk/Scrollbar.pm"

L'inconvénient de cette méthode c'est qu'il faut rajouter les modules un
par un, alors qu'avec la liste on les rajoute tous d'un coup.

À vous de voir.

--
J-L.M.
http://www.bribes.org/perl