je voudrais n'afficher que les éléments de la liste contenant une majuscule sans utiliser un foreach suivi d'un if.
... mais ça ne fonctionne pas ... comment faire?Code:print (join "\n", @{[@Lonly =~ /[A-Z]/g]};
Merci
Version imprimable
je voudrais n'afficher que les éléments de la liste contenant une majuscule sans utiliser un foreach suivi d'un if.
... mais ça ne fonctionne pas ... comment faire?Code:print (join "\n", @{[@Lonly =~ /[A-Z]/g]};
Merci
grep ?
oui ça doit être grep
... pour récupérer une liste, il me faut un contexte de liste, mais ça ne va pas. Je vais explorer cette piste, merci.Code:print (join "\n", @{[grep {/[A-Z]/} @Lonly]} );
tout simplement.Code:print join "\n", grep /[A-Z]/, @Lonly;
J'aurais même tendance à dire que ce que tu veux, c'est plutôt :
(à savoir que la dernière ligne aura aussi un \n).Code:
1
2 use 5.10.0; say foreach grep /A-Z/, @Lonly;
Merci ... c'est en effet plus simple que ce que je ne pensais.
Je m'y perds un peu. Tu m'avais aidé lors d'un précédent problème en écrivant ceci :
L’énoncé étant :Code:my $s = join "", @{[substr($sequence, 0, $X-1) =~ /([ATCG])/g]}[-5..-1], @{[substr($sequence, $X-1) =~ /([ATCG])/g]}[0 .. 5];
Tu passes par un substring pour récupérer les caractères de part et d'autre. Sur cette liste, on utilise une expression régulière afin de ne récupérer que les ATCG.Citation:
A partir du Xième caractère de $sequence X = 30
Récupérer N nucléotides de part et d'autre N = 5
En quoi ce problème est-il différent? Pourquoi cela ne fonctionne-t-il pas? C'est pourtant bien une regexp sur une liste ...
Code:print (join "\n", @{[@Lonly =~ /[A-Z]/g]};
Parcequ'un substring (obtenu avec substr) est un scalaire, pas une table de scalaire, tout simplement.
C'est comme si tu avais écrit :
Code:
1
2
3 my $start = substr($sequence, 0, $X-1); my $end = substr($sequence, $X-1); my $s = join "", @{[$start =~ /([ATCG])/g]}[-5..-1], @{[$end =~ /([ATCG])/g]}[0 .. 5];
A merci, j'ai compris maintenant. :ccool: