J'ai créé un programme en shell qui me crée toutes les couleurs de terminal
possibles sur ma machine.
Je voudrais les récupérer dans un programme Perl. J'ai suivi les conseils de
l'un d'entre vous qui m'avait dit d'utiliser %ENV. Seulement, je n'arrive
pas à interpréter la couleur dans Perl, je n'ai que la chaine de caractères
correspondante, alors que cela marche dans le shell.
Cela me sort foo en couleur.
Maintenant, si je constitue un programme Perl color.pl contenant les lignes
suivantes:
#!/usr/bin/perl -w
print "$ENV{color}\n";
Et que je l'exécute:
$ perl color.pl
\e[92m\e[100m
J'obtiens donc le code de couleur, pas la couleur.
J'ai l'impression que ça vient de la façon dont Perl parse la ligne print;
j'ai donc essayé de jouer avec eval, mais sans succès.
Comment faire?
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
Mark Clements
Tribulations Parallèles wrote:
Bonjour à tous,
J'ai créé un programme en shell qui me crée toutes les couleurs de terminal possibles sur ma machine. Je voudrais les récupérer dans un programme Perl. J'ai suivi les conseils de l'un d'entre vous qui m'avait dit d'utiliser %ENV. Seulement, je n'arrive pas à interpréter la couleur dans Perl, je n'ai que la chaine de caractères correspondante, alors que cela marche dans le shell.
Cela me sort foo en couleur. Maintenant, si je constitue un programme Perl color.pl contenant les lignes suivantes:
#!/usr/bin/perl -w
print "$ENV{color}n";
Et que je l'exécute: $ perl color.pl e[92me[100m
J'obtiens donc le code de couleur, pas la couleur. J'ai l'impression que ça vient de la façon dont Perl parse la ligne print; j'ai donc essayé de jouer avec eval, mais sans succès. Comment faire?
Term::ANSIColor?
:~$ perldoc -q color Found in /usr/share/perl/5.8/pod/perlfaq8.pod How do I print something out in color?
In general, you don't, because you don't know whether the recipient has a color-aware display device. If you know that they have an ANSI terminal that understands color, you can use the Term::ANSIColor module from CPAN:
use Term::ANSIColor; print color("red"), "Stop!n", color("reset"); print color("green"), "Go!n", color("reset");
Ce n'est pas exacement ce que t'as demandé, mais il se peut que ça suffisse.
Mark
Tribulations Parallèles wrote:
Bonjour à tous,
J'ai créé un programme en shell qui me crée toutes les couleurs de terminal
possibles sur ma machine.
Je voudrais les récupérer dans un programme Perl. J'ai suivi les conseils de
l'un d'entre vous qui m'avait dit d'utiliser %ENV. Seulement, je n'arrive
pas à interpréter la couleur dans Perl, je n'ai que la chaine de caractères
correspondante, alors que cela marche dans le shell.
Cela me sort foo en couleur.
Maintenant, si je constitue un programme Perl color.pl contenant les lignes
suivantes:
#!/usr/bin/perl -w
print "$ENV{color}n";
Et que je l'exécute:
$ perl color.pl
e[92me[100m
J'obtiens donc le code de couleur, pas la couleur.
J'ai l'impression que ça vient de la façon dont Perl parse la ligne print;
j'ai donc essayé de jouer avec eval, mais sans succès.
Comment faire?
Term::ANSIColor?
mark@owl:~$ perldoc -q color
Found in /usr/share/perl/5.8/pod/perlfaq8.pod
How do I print something out in color?
In general, you don't, because you don't know whether the recipient has
a color-aware display device. If you know that they have an ANSI
terminal that understands color, you can use the Term::ANSIColor module
from CPAN:
use Term::ANSIColor;
print color("red"), "Stop!n", color("reset");
print color("green"), "Go!n", color("reset");
J'ai créé un programme en shell qui me crée toutes les couleurs de terminal possibles sur ma machine. Je voudrais les récupérer dans un programme Perl. J'ai suivi les conseils de l'un d'entre vous qui m'avait dit d'utiliser %ENV. Seulement, je n'arrive pas à interpréter la couleur dans Perl, je n'ai que la chaine de caractères correspondante, alors que cela marche dans le shell.
Cela me sort foo en couleur. Maintenant, si je constitue un programme Perl color.pl contenant les lignes suivantes:
#!/usr/bin/perl -w
print "$ENV{color}n";
Et que je l'exécute: $ perl color.pl e[92me[100m
J'obtiens donc le code de couleur, pas la couleur. J'ai l'impression que ça vient de la façon dont Perl parse la ligne print; j'ai donc essayé de jouer avec eval, mais sans succès. Comment faire?
Term::ANSIColor?
:~$ perldoc -q color Found in /usr/share/perl/5.8/pod/perlfaq8.pod How do I print something out in color?
In general, you don't, because you don't know whether the recipient has a color-aware display device. If you know that they have an ANSI terminal that understands color, you can use the Term::ANSIColor module from CPAN:
use Term::ANSIColor; print color("red"), "Stop!n", color("reset"); print color("green"), "Go!n", color("reset");
Cela me sort foo en couleur. Maintenant, si je constitue un programme Perl color.pl contenant les lignes suivantes:
#!/usr/bin/perl -w
print "$ENV{color}n";
Et que je l'exécute: $ perl color.pl e[92me[100m
J'obtiens donc le code de couleur, pas la couleur. [..]
Pour interpoler les e dans votre chaîne une substitution suffit :
#!/usr/bin/perl -w
$ENV{color} =~ s/e/e/g;
print "$ENV{color}n";
HTH
-- J-L.M. http://www.bribes.org/perl
Tribulations Parallèles
Jean-Louis MOREL wrote:
$ENV{color} =~ s/e/e/g;
print "$ENV{color}n";
Merci, cela marche donc. Mais pourquoi le e du shell est transformé en e dans Perl? J'ai cherché dans la doc, sans succès. Où trouver l'info correspondante dans la doc Perl en ligne de commande?
C'est un comportement un peu embêtant, car je me vois mal faire cette substitution à chaque fois que je vais utiliser une couleur. N-y a-t-il pas une option de Perl à activer, ou quelque chose du genre, pour empêcher qu'il interprète ainsi le e de la variable d'environnement?
Merci
Julien
Jean-Louis MOREL wrote:
$ENV{color} =~ s/\e/e/g;
print "$ENV{color}n";
Merci, cela marche donc.
Mais pourquoi le e du shell est transformé en \e dans Perl?
J'ai cherché dans la doc, sans succès. Où trouver l'info correspondante dans
la doc Perl en ligne de commande?
C'est un comportement un peu embêtant, car je me vois mal faire cette
substitution à chaque fois que je vais utiliser une couleur. N-y a-t-il pas
une option de Perl à activer, ou quelque chose du genre, pour empêcher
qu'il interprète ainsi le e de la variable d'environnement?
Merci, cela marche donc. Mais pourquoi le e du shell est transformé en e dans Perl? J'ai cherché dans la doc, sans succès. Où trouver l'info correspondante dans la doc Perl en ligne de commande?
C'est un comportement un peu embêtant, car je me vois mal faire cette substitution à chaque fois que je vais utiliser une couleur. N-y a-t-il pas une option de Perl à activer, ou quelque chose du genre, pour empêcher qu'il interprète ainsi le e de la variable d'environnement?
Merci
Julien
Tribulations Parallèles
Mark Clements wrote:
Ce n'est pas exacement ce que t'as demandé, mais il se peut que ça suffisse.
Merci pour ta réponse. En effet, je préfèrerais garder mes couleurs que j'ai laborieusement créé à la volée dans bash. J'avais vu ce module Perl, mais je préfèrerais m'en passer.
Julien
Mark Clements wrote:
Ce n'est pas exacement ce que t'as demandé, mais il se peut que ça
suffisse.
Merci pour ta réponse.
En effet, je préfèrerais garder mes couleurs que j'ai laborieusement créé à
la volée dans bash. J'avais vu ce module Perl, mais je préfèrerais m'en
passer.
Ce n'est pas exacement ce que t'as demandé, mais il se peut que ça suffisse.
Merci pour ta réponse. En effet, je préfèrerais garder mes couleurs que j'ai laborieusement créé à la volée dans bash. J'avais vu ce module Perl, mais je préfèrerais m'en passer.
Julien
Tribulations Parallèles
Jean-Louis MOREL wrote:
$ENV{color} =~ s/e/e/g;
Autre question qui me vient à l'esprit: cette substitution est moins lourde si je peux la faire dans plein de "cellules" du hash en même temps. Voici ce que je voudrais faire, tu vas comprendre tout de suite:
$ENV{color*} =~ s/e/e/g;
Ainsi, je veux faire cette substitution d'un coup dans toutes les cellules dont la clé s'appelle "color" suivie d'autres caractères (ex: colorwhiteonblue, colorredonblack, etc.)
Cette syntaxe n'est pas valide. Comment procéder, et est-ce possible?
Julien
Jean-Louis MOREL wrote:
$ENV{color} =~ s/\e/e/g;
Autre question qui me vient à l'esprit: cette substitution est moins lourde
si je peux la faire dans plein de "cellules" du hash en même temps. Voici
ce que je voudrais faire, tu vas comprendre tout de suite:
$ENV{color*} =~ s/\e/e/g;
Ainsi, je veux faire cette substitution d'un coup dans toutes les cellules
dont la clé s'appelle "color" suivie d'autres caractères (ex:
colorwhiteonblue, colorredonblack, etc.)
Cette syntaxe n'est pas valide.
Comment procéder, et est-ce possible?
Autre question qui me vient à l'esprit: cette substitution est moins lourde si je peux la faire dans plein de "cellules" du hash en même temps. Voici ce que je voudrais faire, tu vas comprendre tout de suite:
$ENV{color*} =~ s/e/e/g;
Ainsi, je veux faire cette substitution d'un coup dans toutes les cellules dont la clé s'appelle "color" suivie d'autres caractères (ex: colorwhiteonblue, colorredonblack, etc.)
Cette syntaxe n'est pas valide. Comment procéder, et est-ce possible?
Julien
jl_morel
Dans l'article <458e87a7$0$32362$, a dit...
Jean-Louis MOREL wrote:
$ENV{color} =~ s/e/e/g;
print "$ENV{color}n";
Merci, cela marche donc. Mais pourquoi le e du shell est transformé en e dans Perl? J'ai cherché dans la doc, sans succès. Où trouver l'info correspondante dans la doc Perl en ligne de commande?
C'est un comportement un peu embêtant, car je me vois mal faire cette substitution à chaque fois que je vais utiliser une couleur. N-y a-t-il pas une option de Perl à activer, ou quelque chose du genre, pour empêcher qu'il interprète ainsi le e de la variable d'environnement?
La variable d'environnement contient la chaîne comme vous l'avez tapée au clavier. La substitution s/e/e/g ne fait que remplacer la chaîne formée des deux caractères '' et 'e' en le caractère ESC (code ASCII 27 en décimal).
Il n'y a aucune raison pour que cette conversion soit automatique pour toutes les variables d'environnement (ni d'ailleurs pour les chaînes fournies par @ARGV ou <STDIN>).
Je suis sous Windows. Le caractère de séparation des noms de chemins est . Si la variable Path contient c:perlembrouillebin il n'est pas du tout souhaitable que e soit transformer en caractère ESC ! Vous voyez l'embrouille ?
-- J-L.M. http://www.bribes.org/perl
Dans l'article <458e87a7$0$32362$426a74cc@news.free.fr>,
Tribulations@Paralleles.invalid a dit...
Jean-Louis MOREL wrote:
$ENV{color} =~ s/\e/e/g;
print "$ENV{color}n";
Merci, cela marche donc.
Mais pourquoi le e du shell est transformé en \e dans Perl?
J'ai cherché dans la doc, sans succès. Où trouver l'info correspondante dans
la doc Perl en ligne de commande?
C'est un comportement un peu embêtant, car je me vois mal faire cette
substitution à chaque fois que je vais utiliser une couleur. N-y a-t-il pas
une option de Perl à activer, ou quelque chose du genre, pour empêcher
qu'il interprète ainsi le e de la variable d'environnement?
La variable d'environnement contient la chaîne comme vous l'avez tapée au
clavier. La substitution s/\e/e/g ne fait que remplacer la chaîne formée
des deux caractères '' et 'e' en le caractère ESC (code ASCII 27 en
décimal).
Il n'y a aucune raison pour que cette conversion soit automatique pour
toutes les variables d'environnement (ni d'ailleurs pour les chaînes
fournies par @ARGV ou <STDIN>).
Je suis sous Windows. Le caractère de séparation des noms de chemins est .
Si la variable Path contient c:perlembrouillebin il n'est pas du tout
souhaitable que e soit transformer en caractère ESC ! Vous voyez
l'embrouille ?
Merci, cela marche donc. Mais pourquoi le e du shell est transformé en e dans Perl? J'ai cherché dans la doc, sans succès. Où trouver l'info correspondante dans la doc Perl en ligne de commande?
C'est un comportement un peu embêtant, car je me vois mal faire cette substitution à chaque fois que je vais utiliser une couleur. N-y a-t-il pas une option de Perl à activer, ou quelque chose du genre, pour empêcher qu'il interprète ainsi le e de la variable d'environnement?
La variable d'environnement contient la chaîne comme vous l'avez tapée au clavier. La substitution s/e/e/g ne fait que remplacer la chaîne formée des deux caractères '' et 'e' en le caractère ESC (code ASCII 27 en décimal).
Il n'y a aucune raison pour que cette conversion soit automatique pour toutes les variables d'environnement (ni d'ailleurs pour les chaînes fournies par @ARGV ou <STDIN>).
Je suis sous Windows. Le caractère de séparation des noms de chemins est . Si la variable Path contient c:perlembrouillebin il n'est pas du tout souhaitable que e soit transformer en caractère ESC ! Vous voyez l'embrouille ?
-- J-L.M. http://www.bribes.org/perl
jl_morel
Dans l'article <458e899c$0$32362$, a dit...
Autre question qui me vient à l'esprit: cette substitution est moins lourde si je peux la faire dans plein de "cellules" du hash en même temps. Voici ce que je voudrais faire, tu vas comprendre tout de suite:
$ENV{color*} =~ s/e/e/g;
Ainsi, je veux faire cette substitution d'un coup dans toutes les cellules dont la clé s'appelle "color" suivie d'autres caractères (ex: colorwhiteonblue, colorredonblack, etc.)
On peut faire une boucle sur les clés du hash %ENV et ne faire la substitution que si la clé commence par color :
foreach (keys %ENV) { $ENV{$_} =~ s/e/e/g if /^color/i; }
-- J-L.M. http://www.bribes.org/perl
Dans l'article <458e899c$0$32362$426a74cc@news.free.fr>,
Tribulations@Paralleles.invalid a dit...
Autre question qui me vient à l'esprit: cette substitution est moins lourde
si je peux la faire dans plein de "cellules" du hash en même temps. Voici
ce que je voudrais faire, tu vas comprendre tout de suite:
$ENV{color*} =~ s/\e/e/g;
Ainsi, je veux faire cette substitution d'un coup dans toutes les cellules
dont la clé s'appelle "color" suivie d'autres caractères (ex:
colorwhiteonblue, colorredonblack, etc.)
On peut faire une boucle sur les clés du hash %ENV et ne faire la substitution
que si la clé commence par color :
foreach (keys %ENV) {
$ENV{$_} =~ s/\e/e/g if /^color/i;
}
Autre question qui me vient à l'esprit: cette substitution est moins lourde si je peux la faire dans plein de "cellules" du hash en même temps. Voici ce que je voudrais faire, tu vas comprendre tout de suite:
$ENV{color*} =~ s/e/e/g;
Ainsi, je veux faire cette substitution d'un coup dans toutes les cellules dont la clé s'appelle "color" suivie d'autres caractères (ex: colorwhiteonblue, colorredonblack, etc.)
On peut faire une boucle sur les clés du hash %ENV et ne faire la substitution que si la clé commence par color :
foreach (keys %ENV) { $ENV{$_} =~ s/e/e/g if /^color/i; }
-- J-L.M. http://www.bribes.org/perl
Tribulations Parallèles
Jean-Louis MOREL wrote:
tout souhaitable que e soit transformer en caractère ESC ! Vous voyez l'embrouille ?
Oui, cela y est, j'ai compris. Merci beaucoup pour l'explication et la solution.
Bonnes (fin de) fêtes
Julien
Jean-Louis MOREL wrote:
tout souhaitable que e soit transformer en caractère ESC ! Vous voyez
l'embrouille ?
Oui, cela y est, j'ai compris.
Merci beaucoup pour l'explication et la solution.