1
votes

pourquoi perl ne reconnaît pas que je veux créer un arrayRef avec "split"?

Je veux diviser un scalaire par des espaces et enregistrer le résultat dans un ArrayReference.

use strict;
use warnings;

use Data::Dumper;

my $name = 'hans georg      mustermann';
my $array = split ' ', $name;

print Dumper($array);     #$VAR1 = 3;

Il semble donc que $ array soit maintenant un scalaire avec le size résultant de l'opération split .

Quand je change le code en my $ array = [split '', $ name]; code> la variable $ array est maintenant un ArrayReference et contient les 3 chaînes.

Je ne comprends tout simplement pas ce comportement. Ce serait vraiment génial si quelqu'un pouvait me l'expliquer ou poster une bonne documentation sur ces choses, car je ne sais pas comment rechercher ce sujet.

Merci d'avance

p>


0 commentaires

3 Réponses :


5
votes

Ce que vous voyez ici est appelé "contexte". La documentation à ce sujet est plutôt dispersée. Vous souhaitez également consulter ce tutoriel sur le "contexte scalaire vs liste" https : //perlmaven.com/scalar-and-list-context-in-perl

Si vous affectez le résultat de split (ou de tout appel de sous-programme) à un tableau, c'est le contexte de la liste:

my @arr = split ' ', $name;
#=> @arr = ('hans', 'georg', 'mustermann');

Ce que montre votre exemple de code, c'est de les affecter à un scalaire - et donc c'est sous "contexte scalaire".

Puisque, naturellement, plusieurs choses ne peuvent pas entrer dans un position, une sorte de résumé doit être fait. Dans le cas de la fonction split , perl5 a défini que le nombre d'éléments dans le résultat de split sera le meilleur.

Consultez la documentation de la fonction split : https://perldoc.pl/functions/split - qui définit en fait le comportement dans un contexte scalaire ainsi que dans un contexte de liste.

Jetez également un coup d'œil à la documentation de toutes les fonctions intégrées à https://perldoc.pl/functions - vous trouverez la définition du comportement sous "list context" et "scalar context" pour la plupart d'entre eux - bien que beaucoup d'entre eux soient ne renvoyant pas "la taille des listes" mais plutôt autre chose.


0 commentaires