Discussion:
uninitialized value
(trop ancien pour répondre)
Jo Engo
2019-06-22 20:03:44 UTC
Permalink
Bonjour,

Je tente de débugger webcollage de xscreensaver, c'est du perl, car il me
sort l'erreur suivante :

Use of uninitialized value $id in concatenation (.) or string at /usr/lib/
xscreensaver/webcollage line 2159.

or voici les lignes 2158 et 2159 :

my ($id) = ($img =~ m@/\d+/(\d+)_([\da-f]+)***@si);
my ($page) = "https://www.flickr.com/photos/$user/$id/";

$id me semble bel et bien être initialisé, non ??

Il n'y a pas j'espère de goto en perl, alors ¿que pasa?

j'xposte avec fcolc et mets le suivi sur fcl.perl, ce dernier donnant
l'air d'être déerté
--
ŒUVRE DE FOI

P : T'es en train de nous chier un chapelet !
M : Ouais... Et le plus dur, c'est de faire la croix...
Marc SCHAEFER
2019-06-22 21:33:34 UTC
Permalink
A première vue, je dirais que $id pourrait ne pas être initialisé
si la regexp ne match pas.

Exemple plus simple:

#! /usr/bin/perl

use strict;
use warnings;

#my $img = "toto";
my $img = "1234";
my $user = "blah";

my ($id) = ($img =~ /\d+/);

my ($page) = "https://www.flickr.com/photos/$user/$id/";

print $page, "\n";
Nicolas George
2019-06-22 21:56:21 UTC
Permalink
Post by Marc SCHAEFER
A première vue, je dirais que $id pourrait ne pas être initialisé
si la regexp ne match pas.
Exactement.
Jo Engo
2019-06-23 06:56:30 UTC
Permalink
A première vue, je dirais que $id pourrait ne pas être initialisé si la
regexp ne match pas.
Ça doit être ça, je n'ai plus qu'à travailler autour, mais comment ?
Serait-ce flickr qui a changé la forme de ses uri ?
--
Une hésitation, quelle qu'elle soit, est un signe de décrépitude
mentale chez les jeunes et de faiblesse physique chez les vieux.
-+- Oscar Wilde -+-
Sergio
2019-06-23 05:26:17 UTC
Permalink
Post by Jo Engo
Bonjour,
Je tente de débugger webcollage de xscreensaver, c'est du perl, car il me
Use of uninitialized value $id in concatenation (.) or string at /usr/lib/
xscreensaver/webcollage line 2159.
my ($page) = "https://www.flickr.com/photos/$user/$id/";
$id me semble bel et bien être initialisé, non ??
Peut-être faut-il échapper le . ?

my ($page) = "https://www.flickr\.com/photos/$user/$id/";
--
Serge http://cahierdesergio.free.fr/
Soutenez le libre: http://www.framasoft.org
Marc SCHAEFER
2019-06-23 07:34:27 UTC
Permalink
Post by Sergio
Peut-être faut-il échapper le . ?
my ($page) = "https://www.flickr\.com/photos/$user/$id/";
Non, car $page n'est pas une regexp; si $page était ensuite
utilisée comme regexp il y aurait certainement plein d'échappements
à faire.

Et d'ailleurs en Perl:

my $page = "bla\.truc";

est égal à

my $page = "bla.truc";

" interpole plus de choses que '

PS: dans le code initial, je me suis demandé d'ailleurs pourquoi
toutes ces parenthèses autour des variables: seule effectivement
la première variable est définie avec une expression de type
liste, donc il faut my ($id), mais on pourrait certainement
aussi enlever la liste dans l'expression.
Marc Espie
2019-06-24 17:48:38 UTC
Permalink
Post by Marc SCHAEFER
Post by Sergio
Peut-être faut-il échapper le . ?
my ($page) = "https://www.flickr\.com/photos/$user/$id/";
Non, car $page n'est pas une regexp; si $page était ensuite
utilisée comme regexp il y aurait certainement plein d'échappements
à faire.
my $page = "bla\.truc";
est égal à
my $page = "bla.truc";
" interpole plus de choses que '
PS: dans le code initial, je me suis demandé d'ailleurs pourquoi
toutes ces parenthèses autour des variables: seule effectivement
la première variable est définie avec une expression de type
liste, donc il faut my ($id), mais on pourrait certainement
aussi enlever la liste dans l'expression.
Non, tu ne peux pas. Il faut une liste si tu veux recuperer les matchs
explicitement.

Si c'est un scalaire, tu auras juste le fait que ca matche ou pas.
Marc Espie
2019-06-24 17:52:53 UTC
Permalink
Post by Jo Engo
Bonjour,
Je tente de débugger webcollage de xscreensaver, c'est du perl, car il me
Use of uninitialized value $id in concatenation (.) or string at /usr/lib/
xscreensaver/webcollage line 2159.
Bon, cette ligne regarde si $img contient un truc qui ressemble a ca

/<des chiffres>/<des chiffres a garder>_<des chiffres hexa>_

et va te stocker le resultat dans id.

C'est assez moche, surtout vu qu'on a une 2e expression avec parentheses
qui ne sert a rien.
Faudrait au moins tester que ce bout correspond a qq chose.
my $id;
unless (($id) = ($img =~ m@/\d+/(\d+)_([\da-f]+)***@si)) {
print STDERR "$img doesn't match regexp\n";
}
Jo Engo
2019-06-24 19:12:41 UTC
Permalink
Post by Marc Espie
my $id;
print STDERR "$img doesn't match regexp\n";
ok, mais ça changera juste le message d'erreur ^^ à mon avis c'est flickr
qui a changé la construction de ses uri d'où pas de match.
--
Le vrai moyen d'être trompé, c'est de se croire plus fin que les autres.
-+- François de La Rochefoucauld (1613-1680), Maximes 127 -+-
Jo Engo
2019-06-24 19:50:03 UTC
Permalink
Post by Marc Espie
Faudrait au moins tester que ce bout correspond a qq chose.
my $id;
print STDERR "$img doesn't match regexp\n";
}
banco :

http:// ne matche pas la regesp
il faut que je trouve où $img est initialisé :)
--
L'amour ôte l'esprit à ceux qui en ont et en donne à ceux qui n'en ont
pas.
-+- Denis Diderot -+-
Nicolas George
2019-06-24 19:53:55 UTC
Permalink
Jo Engo , dans le message
Post by Jo Engo
http:// ne matche pas la regesp
Au pif, https?:// devrait débloquer la situation.
Jo Engo
2019-06-24 20:08:56 UTC
Permalink
Post by Nicolas George
Jo Engo , dans le message
Post by Jo Engo
http:// ne matche pas la regesp
Au pif, https?:// devrait débloquer la situation.
I don't think so.

En fait $img est défini là :

foreach my $chunk (split (/\n/, $body)) {
my ($img) = ($chunk =~ m@"displayUrl": *"(.*?)"@six);
next unless defined ($img);
$img =~ s/\\//gs;
$img = "//" unless ($img =~ m@^/@s);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
$img = "http:$img" unless ($img =~ m/^http/s);

je crois que la couille est là où j'ai souligné.
--
Je n'ai pas souvent assisté à des course de spermatozoïdes, mais j'ai
donné beaucoup de départs.
-+- Olivier de Kersauson -+-
Jo Engo
2019-06-24 21:00:25 UTC
Permalink
Post by Jo Engo
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Remplacé par :
$img = "//$img" unless ($img =~ m@^/@s);
qui me semble plus disons logique et quine, je n'ai plus d'erreur (mais
je ne comprends pas le unless, qui me fait un cours ?)
--
Post by Jo Engo
Boarf, tu sais, pour mon Canon un sac poubelle suffit...
Pierrôt... Chuis choqué la tu vois :)
-+- Daniel, sur fr.rec.photo -+-
Marc Espie
2019-06-25 12:29:36 UTC
Permalink
Post by Jo Engo
Post by Jo Engo
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
qui me semble plus disons logique et quine, je n'ai plus d'erreur (mais
je ne comprends pas le unless, qui me fait un cours ?)
Ben c'est de l'anglais... unless c'est l'inverse de if.
Et c'est une garde en fin de ligne, donc syntaxe "inversee".
En vrai, il n'y a pas besoin des parentheses du coup:
$img = "//$img" unless $img =~ m@^/@s;
Jo Engo
2019-06-25 08:52:41 UTC
Permalink
Post by Jo Engo
foreach my $chunk (split (/\n/, $body)) {
next unless defined ($img);
$img =~ s/\\//gs;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
$img = "http:$img" unless ($img =~ m/^http/s);
je crois que la couille est là où j'ai souligné.
Bon maintenant j'ai ça :

Loading Image... ne
matche pas la regesp
Use of uninitialized value $id in concatenation (.) or string at ./
webcollage line 2162.

NB j'ai tapé :

my $id ;
unless (($id) = ($img =~ m@/\d+/(\d+)_([\da-f]+)***@si)) {
print STDERR "$img ne matche pas la regesp\n";

au lieu de "$img doesn't match regexp"

la correction est toujours à faire dans les lignes que j'ai citée ci-
dessus, mais là je ne sais pas faire.
--
M U S E
U M E S
S E M U
E S U M
-- Schulz, Rémi
Olivier Miakinen
2019-06-25 09:47:30 UTC
Permalink
Post by Jo Engo
http://https://live.staticflickr.com/31337/48119239236_d04d39c289.jpg ne
^^^^^^^^^^^^^^^

C'est volontaire ?
--
Olivier Miakinen
Olivier Miakinen
2019-06-25 12:49:05 UTC
Permalink
Pendant que j'y pense...
[...] ne matche pas la regexp [...]
Si tu as des problèmes de mise au point des regexp, et que ce
n'est pas dû à un problème de syntaxe perl, tu peux poser ta
question expurgée du code perl dans fr.comp.lang.regexp
--
Olivier Miakinen
Jo Engo
2019-06-25 14:47:23 UTC
Permalink
Si tu as des problèmes de mise au point des regexp, et que ce n'est pas
dû à un problème de syntaxe perl, tu peux poser ta question expurgée du
code perl dans fr.comp.lang.regexp
Merci mais il y a rien de difficile ou d'excitant concerbnant les regexp,
il y a juste un problçme avec le code p.e.r.l. :)

j'en suis là :

{ $img = "//$img" unless ($img =~ m@^/@s);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
$img = "http:$img";} unless ($img =~ m/^http/s);

estce correct syntaxiquement ? parce que j'intuite que ça résout mon
problème (là le blob ajoute http:// devant https://good.uri ce qui n'est
pas ce que je souhaite.)
--
Il y a trois types de mathématiciens, ceux qui savent compter et ceux
qui ne savent pas.
Jo Engo
2019-07-02 17:13:19 UTC
Permalink
Post by Jo Engo
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
$img = "http:$img";} unless ($img =~ m/^http/s);
estce correct syntaxiquement ?
J'ai galéré à débusquer le loup, en fait j'ai fait comme qui dirait
l'inverse, parce que je n'ai pas compris pourquoi ça voulait pas (et perl
me trouvait des erreurs 1000 lignes plus loin). Vous auriez pu m'aider
sur ce coup là les perliers :)
--
Avant de choisir le prénom d'un garçon, pensez toujours à la femme qui
aura a le murmurer plus tard.
-+- Jules Barbey D'Aurevilly (1808-1889) -+-
Loading...