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

uninitialized value

18 réponses
Avatar
Jo Engo
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...

10 réponses

1 2
Avatar
Marc SCHAEFER
In fr.comp.lang.perl Jo Engo wrote:
my ($id) = ($img =~ m@/d+/(d+)_([da-f]+));

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";
Avatar
Nicolas George
Marc SCHAEFER , dans le message <qem6re$n41$, a
écrit :
In fr.comp.lang.perl Jo Engo wrote:
my ($id) = ($img =~ m@/d+/(d+)_([da-f]+));

A première vue, je dirais que $id pourrait ne pas être initialisé
si la regexp ne match pas.

Exactement.
Avatar
Sergio
Le 22/06/2019 à 22:03, Jo Engo a écrit :
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]+));
my ($page) = "https://www.flickr.com/photos/$user/$id/&quot" target="_blank" class="text-blue hover:opacity-90 " style="word-break: break-all;" rel="noopener nofollow">https://www.flickr.com/photos/$user/$id/&quot;;
$id me semble bel et bien être initialisé, non ??

Peut-être faut-il échapper le . ?
my ($page) = "https://www.flickr.com/photos/$user/$id/&quot" target="_blank" class="text-blue hover:opacity-90 " style="word-break: break-all;" rel="noopener nofollow">https://www.flickr.com/photos/$user/$id/&quot;;
--
Serge http://cahierdesergio.free.fr/
Soutenez le libre: http://www.framasoft.org
Avatar
Jo Engo
Le Sat, 22 Jun 2019 23:33:34 +0200, Marc SCHAEFER a écrit :
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 -+-
Avatar
Marc SCHAEFER
Sergio wrote:
Peut-être faut-il échapper le . ?
my ($page) = "https://www.flickr.com/photos/$user/$id/&quot;;

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.
Avatar
espie
In article <qena23$9gp$,
Marc SCHAEFER wrote:
Sergio wrote:
Peut-être faut-il échapper le . ?
my ($page) = "https://www.flickr.com/photos/$user/$id/&quot;;

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.

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.
Avatar
espie
In article <pan$3ce0f$974dfe90$a0a64b4e$,
Jo Engo wrote:
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]+));

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]+))) {
print STDERR "$img doesn't match regexpn";
}
Avatar
Jo Engo
Le Mon, 24 Jun 2019 17:52:53 +0000, Marc Espie a écrit :
my $id;
unless (($id) = ($img =~ m@/d+/(d+)_([da-f]+))) {
print STDERR "$img doesn't match regexpn";

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 -+-
Avatar
Jo Engo
Le Mon, 24 Jun 2019 17:52:53 +0000, Marc Espie a écrit :
Faudrait au moins tester que ce bout correspond a qq chose.
my $id;
unless (($id) = ($img =~ m@/d+/(d+)_([da-f]+))) {
print STDERR "$img doesn't match regexpn";
}

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 -+-
Avatar
Nicolas George
Jo Engo , dans le message
<pan$bd161$c8240b45$4aea2fd8$, a écrit :
http:// ne matche pas la regesp

Au pif, https?:// devrait débloquer la situation.
1 2