OVH Cloud OVH Cloud

Split

6 réponses
Avatar
Thibaud
Bonjour,
Je cherche =E0 obtenir le nombre d'items
s=E9par=E9s par un point virgule.
open (DB, "<$file") || print $!;
$nb=3Dsplit(/;/,<DB>);
close DB; =20

Mon =E9diteur me dit :
Use of implicit split to @_ is deprecated
Dois je le croire alors que le r=E9sultat est correct ?
Merci
A+
Thibaud

6 réponses

Avatar
Jérémy JUST
Le Sun, 1 Oct 2006 17:51:26 +0200,

Je cherche à obtenir le nombre d'items
séparés par un point virgule.
open (DB, "<$file") || print $!;
$nb=split(/;/,<DB>);
close DB;

Mon éditeur me dit :
Use of implicit split to @_ is deprecated
Dois je le croire alors que le résultat est correct ?


C'est l'éditeur ou le compilateur qui te répond ça?

Une fonctionnalité « deprecated » est encore utilisable, mais
peut-être plus pour longtemps, il vaut mieux ne pas l'utiliser dans du
code nouvellement écrit.

Est-ce que ça passe mieux:

$nb = scalar split(/;/, <DB>);


--
Jérémy JUST

Avatar
Thibaud
C'est l'éditeur ou le compilateur qui te répond ça?
Les warnings de l'éditeur

$nb = scalar split(/;/, <DB>);
Idem


Merci

Avatar
Jérémy JUST
Le Sun, 1 Oct 2006 19:13:32 +0200,

C'est l'éditeur ou le compilateur qui te répond ça?
Les warnings de l'éditeur



Donc ça n'a pas d'importance. Rien ne garantit qu'il sache lire du
code Perl.


--
Jérémy JUST


Avatar
Paul Gaborit
À (at) Sun, 1 Oct 2006 18:29:18 +0200,
Jérémy JUST écrivait (wrote):
Le Sun, 1 Oct 2006 17:51:26 +0200,

Je cherche à obtenir le nombre d'items
séparés par un point virgule.
open (DB, "<$file") || print $!;
$nb=split(/;/,<DB>);
close DB;

Mon éditeur me dit :
Use of implicit split to @_ is deprecated
Dois je le croire alors que le résultat est correct ?


C'est l'éditeur ou le compilateur qui te répond ça?

Une fonctionnalité « deprecated » est encore utilisable, mais
peut-être plus pour longtemps, il vaut mieux ne pas l'utiliser dans du
code nouvellement écrit.

Est-ce que ça passe mieux:

$nb = scalar split(/;/, <DB>);


Ces deux formes sont similaires. Elles sont déconseillées et en cours
d'abandon. D'où le message d'avertissement.

L'explication : dans un contexte scalaire, 'split' retourne bien le
nombre d'éléments issus du découpage *mais* utilise aussi
*implicitement* le tableau @_ pour stocker ces éléments. C'est
embêtant car vous perdez alors les paramètres reçus.

Si les éléments issus du découpage ne vous intéressent vraiment pas,
il vaut peut-être mieux les compter autrement : par exemple, via un
m//g (même si ce n'est pas exactement équivalent).

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>


Avatar
André
il vaut peut-être mieux les compter autrement : par exemple, via un
m//g (même si ce n'est pas exactement équivalent).


Très intéressant, merci beaucoup.

Avatar
Paul Gaborit
À (at) Mon, 02 Oct 2006 09:04:21 +0200,
Paul Gaborit écrivait (wrote):
Si les éléments issus du découpage ne vous intéressent vraiment pas,
il vaut peut-être mieux les compter autrement : par exemple, via un
m//g (même si ce n'est pas exactement équivalent).


Je termine ma réponse que j'avais envoyée un peu vite.

Si les éléments issus du découpage vous intéressent alors il vaut
mieux les extraire *puis* les compter :

my @elem = split /;/, $_;
my $nb = @elem;

ou (en une seule ligne mais c'est moins compréhensible) :

my $nb = my @elem = split /;/, $_;

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>