Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Stéphane Müller
Il faut utiliser une variable pour le handle de fichier. Quelque chose comme cela :
use FileHandle; use File::Spec; ... # Si $Verbose alors $OUT => SDTOUT sinon $OUT => 'nul' ou '/dev/null' selon l'OS $OUT = $Verbose ? *STDOUT : new FileHandle '>'.File::Spec->devnull(); ... print $OUT 'Lorem ipsum dolor sit amet ...';
Stéphane
"Patrice Karatchentzeff" a écrit dans le message de news:
Bonjour,
Je voudrai rendre mon script plus ou moins bavard selon le contexte...
La première idée que j'ai eu est d'avoir un filehandle dédié (disons VERBOSE) en truffant mon code de :
print VERBOSE "tout ce que vous avez toujours voulu savoir icin" ;
puis en imposant VERBOSE à STDOUT en début de script suivant les options choisies, du genre
VERBOSE=STDOUT if $verbose ;
Seulement je ne vois pas trop comment écrire la dernière commande...
Je pourrai écrire partout
print "tout... " if $verbose ;
mais je trouve cela plus lourd...
Une idée ? Peut-être y a-t-il une astuce ou un truc qui m'échappe ?
Il faut utiliser une variable pour le handle de fichier. Quelque chose comme cela :
use FileHandle;
use File::Spec;
...
# Si $Verbose alors $OUT => SDTOUT sinon $OUT => 'nul' ou '/dev/null' selon l'OS
$OUT = $Verbose ? *STDOUT : new FileHandle '>'.File::Spec->devnull();
...
print $OUT 'Lorem ipsum dolor sit amet ...';
Stéphane
"Patrice Karatchentzeff" <p.karatchentzeff@free.fr> a écrit dans le message de news:
87hczj4wm9.fsf@belledonne.chartreuse.fr...
Bonjour,
Je voudrai rendre mon script plus ou moins bavard selon le contexte...
La première idée que j'ai eu est d'avoir un filehandle dédié (disons
VERBOSE) en truffant mon code de :
print VERBOSE "tout ce que vous avez toujours voulu savoir icin" ;
puis en imposant VERBOSE à STDOUT en début de script suivant les
options choisies, du genre
VERBOSE=STDOUT if $verbose ;
Seulement je ne vois pas trop comment écrire la dernière commande...
Je pourrai écrire partout
print "tout... " if $verbose ;
mais je trouve cela plus lourd...
Une idée ? Peut-être y a-t-il une astuce ou un truc qui m'échappe ?
Il faut utiliser une variable pour le handle de fichier. Quelque chose comme cela :
use FileHandle; use File::Spec; ... # Si $Verbose alors $OUT => SDTOUT sinon $OUT => 'nul' ou '/dev/null' selon l'OS $OUT = $Verbose ? *STDOUT : new FileHandle '>'.File::Spec->devnull(); ... print $OUT 'Lorem ipsum dolor sit amet ...';
Stéphane
"Patrice Karatchentzeff" a écrit dans le message de news:
Bonjour,
Je voudrai rendre mon script plus ou moins bavard selon le contexte...
La première idée que j'ai eu est d'avoir un filehandle dédié (disons VERBOSE) en truffant mon code de :
print VERBOSE "tout ce que vous avez toujours voulu savoir icin" ;
puis en imposant VERBOSE à STDOUT en début de script suivant les options choisies, du genre
VERBOSE=STDOUT if $verbose ;
Seulement je ne vois pas trop comment écrire la dernière commande...
Je pourrai écrire partout
print "tout... " if $verbose ;
mais je trouve cela plus lourd...
Une idée ? Peut-être y a-t-il une astuce ou un truc qui m'échappe ?
Il faut utiliser une variable pour le handle de fichier. Quelque chose comme cela :
use FileHandle; use File::Spec; ... # Si $Verbose alors $OUT => SDTOUT sinon $OUT => 'nul' ou '/dev/null' selon l'OS $OUT = $Verbose ? *STDOUT : new FileHandle '>'.File::Spec->devnull(); ... print $OUT 'Lorem ipsum dolor sit amet ...';
Il faut utiliser une variable pour le handle de fichier. Quelque chose comme cela :
use FileHandle;
use File::Spec;
...
# Si $Verbose alors $OUT => SDTOUT sinon $OUT => 'nul' ou '/dev/null' selon l'OS
$OUT = $Verbose ? *STDOUT : new FileHandle '>'.File::Spec->devnull();
...
print $OUT 'Lorem ipsum dolor sit amet ...';
Il faut utiliser une variable pour le handle de fichier. Quelque chose comme cela :
use FileHandle; use File::Spec; ... # Si $Verbose alors $OUT => SDTOUT sinon $OUT => 'nul' ou '/dev/null' selon l'OS $OUT = $Verbose ? *STDOUT : new FileHandle '>'.File::Spec->devnull(); ... print $OUT 'Lorem ipsum dolor sit amet ...';
Il faut utiliser une variable pour le handle de fichier. Quelque chose comme cela :
use FileHandle; use File::Spec; ... # Si $Verbose alors $OUT => SDTOUT sinon $OUT => 'nul' ou '/dev/null' selon l'OS $OUT = $Verbose ? *STDOUT : new FileHandle '>'.File::Spec->devnull(); ... print $OUT 'Lorem ipsum dolor sit amet ...';
Impec : merci.
Parlé trop vite :(
J'ai réécrit le code ainsi :
use strict ; use warnings ; use Carp ; use English ;
my $VERBOSE ;
if ($verbose) { $VERBOSE = *STDOUT ; } else { open $VERBOSE, ">", "/dev/null" or croak "Can't redirect output to /dev/null : $OS_ERRORn" ; } }})
print $VERBOSE "Carthago delenda estn" ;
et j'obtiens :
Can't use string ("") as a symbol ref while "strict refs" in use at... pour le open $VERBOSE (ou le print c'est selon).
C'est le use strict qui met le souk mais je ne vois pas comment contourner sans le désactiver (ce que je ne veux pas)...
Une idée ?
Merci
PK
PS : sinon cela fonctionne bien : merci de l'idée.
Il faut utiliser une variable pour le handle de fichier. Quelque chose comme cela :
use FileHandle;
use File::Spec;
...
# Si $Verbose alors $OUT => SDTOUT sinon $OUT => 'nul' ou '/dev/null' selon l'OS
$OUT = $Verbose ? *STDOUT : new FileHandle '>'.File::Spec->devnull();
...
print $OUT 'Lorem ipsum dolor sit amet ...';
Impec : merci.
Parlé trop vite :(
J'ai réécrit le code ainsi :
use strict ;
use warnings ;
use Carp ;
use English ;
my $VERBOSE ;
if ($verbose) {
$VERBOSE = *STDOUT ;
}
else {
open $VERBOSE, ">", "/dev/null"
or croak "Can't redirect output to /dev/null : $OS_ERRORn" ;
}
}})
print $VERBOSE "Carthago delenda estn" ;
et j'obtiens :
Can't use string ("") as a symbol ref while "strict refs" in use at...
pour le open $VERBOSE (ou le print c'est selon).
C'est le use strict qui met le souk mais je ne vois pas comment
contourner sans le désactiver (ce que je ne veux pas)...
Une idée ?
Merci
PK
PS : sinon cela fonctionne bien : merci de l'idée.
Il faut utiliser une variable pour le handle de fichier. Quelque chose comme cela :
use FileHandle; use File::Spec; ... # Si $Verbose alors $OUT => SDTOUT sinon $OUT => 'nul' ou '/dev/null' selon l'OS $OUT = $Verbose ? *STDOUT : new FileHandle '>'.File::Spec->devnull(); ... print $OUT 'Lorem ipsum dolor sit amet ...';
Impec : merci.
Parlé trop vite :(
J'ai réécrit le code ainsi :
use strict ; use warnings ; use Carp ; use English ;
my $VERBOSE ;
if ($verbose) { $VERBOSE = *STDOUT ; } else { open $VERBOSE, ">", "/dev/null" or croak "Can't redirect output to /dev/null : $OS_ERRORn" ; } }})
print $VERBOSE "Carthago delenda estn" ;
et j'obtiens :
Can't use string ("") as a symbol ref while "strict refs" in use at... pour le open $VERBOSE (ou le print c'est selon).
C'est le use strict qui met le souk mais je ne vois pas comment contourner sans le désactiver (ce que je ne veux pas)...
Une idée ?
Merci
PK
PS : sinon cela fonctionne bien : merci de l'idée.
use strict ; use warnings ; use Carp ; use English ;
my $VERBOSE ;
if ($verbose) { $VERBOSE = *STDOUT ; } else { open $VERBOSE, ">", "/dev/null" or croak "Can't redirect output to /dev/null : $OS_ERRORn" ; } }})
print $VERBOSE "Carthago delenda estn" ;
et j'obtiens :
Can't use string ("") as a symbol ref while "strict refs" in use at... pour le open $VERBOSE (ou le print c'est selon).
Je n'obtiens pas ce message, par contre, j'obtiens 2 autres messages:
1. Global symbol "$verbose" requires explicit package name 2. Unmatched right curly bracket at test43.plz line 23, at end of line
Bon, je corrige les erreurs des 2 messages (c'est à dire je rajoute une ligne "my $verbose" et je vire les paranthèses "}})" à la fin) et ça marche impec:
========================= ========= use strict ; use warnings ; use Carp ; use English ;
my $VERBOSE ;
my $verbose = 1;
if ($verbose) { $VERBOSE = *STDOUT ; } else { open $VERBOSE, ">", "/dev/null" or croak "Can't redirect output to /dev/null : $OS_ERRORn" ; } ========================= =========
Juste une petite remarque supplémentaire: si tu as encore des problèmes avec le message >>Can't use string ("") as a symbol ref<<, alors essaie de rajouter des lignes "*** rajout ***" (juste avant le "open $VERBOSE"):
========================= ========= use strict ; use warnings ; use Carp ; use English ;
my $VERBOSE ;
my $verbose = 1;
if ($verbose) { $VERBOSE = *STDOUT ; } else {
# ******** rajout ******************** unless (defined $VERBOSE) { die "MINCE, ZUT ALORS!!!!, je viens de déclarer ". "$VERBOSE sans valeur, mais cette p.....aine ". "variable a une valeur ($VERBOSE), et en plus ". "je ne sais pas d'où elle vient cette valeur !!!!"; } # ******** rajout ********************
open $VERBOSE, ">", "/dev/null" or croak "Can't redirect output to /dev/null : $OS_ERRORn" ; } ========================= =========
Patrice Karatchentzeff wrote:
J'ai réécrit le code ainsi :
use strict ;
use warnings ;
use Carp ;
use English ;
my $VERBOSE ;
if ($verbose) {
$VERBOSE = *STDOUT ;
}
else {
open $VERBOSE, ">", "/dev/null"
or croak "Can't redirect output to /dev/null : $OS_ERRORn" ;
}
}})
print $VERBOSE "Carthago delenda estn" ;
et j'obtiens :
Can't use string ("") as a symbol ref while "strict refs" in use at...
pour le open $VERBOSE (ou le print c'est selon).
Je n'obtiens pas ce message, par contre, j'obtiens 2 autres messages:
1. Global symbol "$verbose" requires explicit package name
2. Unmatched right curly bracket at test43.plz line 23, at end of line
Bon, je corrige les erreurs des 2 messages (c'est à dire je rajoute
une ligne "my $verbose" et je vire les paranthèses "}})" à la fin) et
ça marche impec:
========================= =========
use strict ;
use warnings ;
use Carp ;
use English ;
my $VERBOSE ;
my $verbose = 1;
if ($verbose) {
$VERBOSE = *STDOUT ;
}
else {
open $VERBOSE, ">", "/dev/null"
or croak "Can't redirect output to /dev/null : $OS_ERRORn" ;
}
========================= =========
Juste une petite remarque supplémentaire: si tu as encore des
problèmes avec le message >>Can't use string ("") as a symbol ref<<,
alors essaie de rajouter des lignes "*** rajout ***" (juste avant le
"open $VERBOSE"):
========================= =========
use strict ;
use warnings ;
use Carp ;
use English ;
my $VERBOSE ;
my $verbose = 1;
if ($verbose) {
$VERBOSE = *STDOUT ;
}
else {
# ******** rajout ********************
unless (defined $VERBOSE) {
die "MINCE, ZUT ALORS!!!!, je viens de déclarer ".
"$VERBOSE sans valeur, mais cette p.....aine ".
"variable a une valeur ($VERBOSE), et en plus ".
"je ne sais pas d'où elle vient cette valeur !!!!";
}
# ******** rajout ********************
open $VERBOSE, ">", "/dev/null"
or croak "Can't redirect output to /dev/null : $OS_ERRORn" ;
}
========================= =========
use strict ; use warnings ; use Carp ; use English ;
my $VERBOSE ;
if ($verbose) { $VERBOSE = *STDOUT ; } else { open $VERBOSE, ">", "/dev/null" or croak "Can't redirect output to /dev/null : $OS_ERRORn" ; } }})
print $VERBOSE "Carthago delenda estn" ;
et j'obtiens :
Can't use string ("") as a symbol ref while "strict refs" in use at... pour le open $VERBOSE (ou le print c'est selon).
Je n'obtiens pas ce message, par contre, j'obtiens 2 autres messages:
1. Global symbol "$verbose" requires explicit package name 2. Unmatched right curly bracket at test43.plz line 23, at end of line
Bon, je corrige les erreurs des 2 messages (c'est à dire je rajoute une ligne "my $verbose" et je vire les paranthèses "}})" à la fin) et ça marche impec:
========================= ========= use strict ; use warnings ; use Carp ; use English ;
my $VERBOSE ;
my $verbose = 1;
if ($verbose) { $VERBOSE = *STDOUT ; } else { open $VERBOSE, ">", "/dev/null" or croak "Can't redirect output to /dev/null : $OS_ERRORn" ; } ========================= =========
Juste une petite remarque supplémentaire: si tu as encore des problèmes avec le message >>Can't use string ("") as a symbol ref<<, alors essaie de rajouter des lignes "*** rajout ***" (juste avant le "open $VERBOSE"):
========================= ========= use strict ; use warnings ; use Carp ; use English ;
my $VERBOSE ;
my $verbose = 1;
if ($verbose) { $VERBOSE = *STDOUT ; } else {
# ******** rajout ******************** unless (defined $VERBOSE) { die "MINCE, ZUT ALORS!!!!, je viens de déclarer ". "$VERBOSE sans valeur, mais cette p.....aine ". "variable a une valeur ($VERBOSE), et en plus ". "je ne sais pas d'où elle vient cette valeur !!!!"; } # ******** rajout ********************
open $VERBOSE, ">", "/dev/null" or croak "Can't redirect output to /dev/null : $OS_ERRORn" ; } ========================= =========
Klaus
Klaus wrote:
Juste une petite remarque supplémentaire: si tu as encore des problèmes avec le message >>Can't use string ("") as a symbol ref<<, alors essaie de rajouter des lignes "*** rajout ***" (juste avant le "open $VERBOSE"):
======================== ========== use strict ; use warnings ; use Carp ; use English ;
Je suis désolé, j'ai fait erreur logique, il faut dire "if", et non pas "unless":
if (defined $VERBOSE) {
die "MINCE, ZUT ALORS!!!!, je viens de déclarer ". "$VERBOSE sans valeur, mais cette p.....aine ". "variable a une valeur ($VERBOSE), et en plus ". "je ne sais pas d'où elle vient cette valeur !!!!";
Je suis désolé, j'ai fait une erreur de communication, il faut dire "Il y a un problème", et non pas "MINCE, ZUT ALORS!!!!...."
die "Il y a un problème avec variable $VERBOSE ". "= .'$VERBOSE' qui ne devrait pas être définie, ". "mais elle l'est";
} # ******** rajout ********************
open $VERBOSE, ">", "/dev/null" or croak "Can't redirect output to /dev/null : $OS_ERRORn" ; } ======================== ==========
Klaus wrote:
Juste une petite remarque supplémentaire: si tu as encore des
problèmes avec le message >>Can't use string ("") as a symbol ref<<,
alors essaie de rajouter des lignes "*** rajout ***" (juste avant le
"open $VERBOSE"):
======================== ==========
use strict ;
use warnings ;
use Carp ;
use English ;
Je suis désolé, j'ai fait erreur logique, il faut dire "if", et non
pas "unless":
if (defined $VERBOSE) {
die "MINCE, ZUT ALORS!!!!, je viens de déclarer ".
"$VERBOSE sans valeur, mais cette p.....aine ".
"variable a une valeur ($VERBOSE), et en plus ".
"je ne sais pas d'où elle vient cette valeur !!!!";
Je suis désolé, j'ai fait une erreur de communication, il faut dire
"Il y a un problème", et non pas "MINCE, ZUT ALORS!!!!...."
die "Il y a un problème avec variable $VERBOSE ".
"= .'$VERBOSE' qui ne devrait pas être définie, ".
"mais elle l'est";
}
# ******** rajout ********************
open $VERBOSE, ">", "/dev/null"
or croak "Can't redirect output to /dev/null : $OS_ERRORn" ;
}
======================== ==========
Juste une petite remarque supplémentaire: si tu as encore des problèmes avec le message >>Can't use string ("") as a symbol ref<<, alors essaie de rajouter des lignes "*** rajout ***" (juste avant le "open $VERBOSE"):
======================== ========== use strict ; use warnings ; use Carp ; use English ;
Je suis désolé, j'ai fait erreur logique, il faut dire "if", et non pas "unless":
if (defined $VERBOSE) {
die "MINCE, ZUT ALORS!!!!, je viens de déclarer ". "$VERBOSE sans valeur, mais cette p.....aine ". "variable a une valeur ($VERBOSE), et en plus ". "je ne sais pas d'où elle vient cette valeur !!!!";
Je suis désolé, j'ai fait une erreur de communication, il faut dire "Il y a un problème", et non pas "MINCE, ZUT ALORS!!!!...."
die "Il y a un problème avec variable $VERBOSE ". "= .'$VERBOSE' qui ne devrait pas être définie, ". "mais elle l'est";
} # ******** rajout ********************
open $VERBOSE, ">", "/dev/null" or croak "Can't redirect output to /dev/null : $OS_ERRORn" ; } ======================== ==========
Patrice Karatchentzeff
"Klaus" writes:
[...]
Je n'obtiens pas ce message, par contre, j'obtiens 2 autres messages:
1. Global symbol "$verbose" requires explicit package name 2. Unmatched right curly bracket at test43.plz line 23, at end of line
Oui : autant pour moi, j'ai essayé de réduire mon script à sa plus faible représentation du problème et je n'ai même pas fait tourner l'exemple. Désolé.
Bon, je corrige les erreurs des 2 messages (c'est à dire je rajoute une ligne "my $verbose" et je vire les paranthèses "}})" à la fin) et ça marche impec:
[...]
Exact. Pour moi aussi et sur mon script... comprends pas ce qui s'est passé la dernière fois.
Juste une petite remarque supplémentaire: si tu as encore des problèmes avec le message >>Can't use string ("") as a symbol ref<<, alors essaie de rajouter des lignes "*** rajout ***" (juste avant le "open $VERBOSE"):
(...)
# ******** rajout ******************** unless (defined $VERBOSE) { die "MINCE, ZUT ALORS!!!!, je viens de déclarer ". "$VERBOSE sans valeur, mais cette p.....aine ". "variable a une valeur ($VERBOSE), et en plus ". "je ne sais pas d'où elle vient cette valeur !!!!"; } # ******** rajout ********************
open $VERBOSE, ">", "/dev/null" or croak "Can't redirect output to /dev/null : $OS_ERRORn" ; } ================================= C'est p'têt cela... dans tous les cas, cela ne fait pas de mal de
Je n'obtiens pas ce message, par contre, j'obtiens 2 autres messages:
1. Global symbol "$verbose" requires explicit package name
2. Unmatched right curly bracket at test43.plz line 23, at end of line
Oui : autant pour moi, j'ai essayé de réduire mon script à sa plus
faible représentation du problème et je n'ai même pas fait tourner
l'exemple. Désolé.
Bon, je corrige les erreurs des 2 messages (c'est à dire je rajoute
une ligne "my $verbose" et je vire les paranthèses "}})" à la fin) et
ça marche impec:
[...]
Exact. Pour moi aussi et sur mon script... comprends pas ce qui s'est
passé la dernière fois.
Juste une petite remarque supplémentaire: si tu as encore des
problèmes avec le message >>Can't use string ("") as a symbol ref<<,
alors essaie de rajouter des lignes "*** rajout ***" (juste avant le
"open $VERBOSE"):
(...)
# ******** rajout ********************
unless (defined $VERBOSE) {
die "MINCE, ZUT ALORS!!!!, je viens de déclarer ".
"$VERBOSE sans valeur, mais cette p.....aine ".
"variable a une valeur ($VERBOSE), et en plus ".
"je ne sais pas d'où elle vient cette valeur !!!!";
}
# ******** rajout ********************
open $VERBOSE, ">", "/dev/null"
or croak "Can't redirect output to /dev/null : $OS_ERRORn" ;
}
=================================
C'est p'têt cela... dans tous les cas, cela ne fait pas de mal de
Je n'obtiens pas ce message, par contre, j'obtiens 2 autres messages:
1. Global symbol "$verbose" requires explicit package name 2. Unmatched right curly bracket at test43.plz line 23, at end of line
Oui : autant pour moi, j'ai essayé de réduire mon script à sa plus faible représentation du problème et je n'ai même pas fait tourner l'exemple. Désolé.
Bon, je corrige les erreurs des 2 messages (c'est à dire je rajoute une ligne "my $verbose" et je vire les paranthèses "}})" à la fin) et ça marche impec:
[...]
Exact. Pour moi aussi et sur mon script... comprends pas ce qui s'est passé la dernière fois.
Juste une petite remarque supplémentaire: si tu as encore des problèmes avec le message >>Can't use string ("") as a symbol ref<<, alors essaie de rajouter des lignes "*** rajout ***" (juste avant le "open $VERBOSE"):
(...)
# ******** rajout ******************** unless (defined $VERBOSE) { die "MINCE, ZUT ALORS!!!!, je viens de déclarer ". "$VERBOSE sans valeur, mais cette p.....aine ". "variable a une valeur ($VERBOSE), et en plus ". "je ne sais pas d'où elle vient cette valeur !!!!"; } # ******** rajout ********************
open $VERBOSE, ">", "/dev/null" or croak "Can't redirect output to /dev/null : $OS_ERRORn" ; } ================================= C'est p'têt cela... dans tous les cas, cela ne fait pas de mal de