Je travaille en Perl et j'ai rencontré un résultat impair en utilisant l'opérateur conditionnel.Comportement de l'opérateur conditionnel Odd Perl
Le code en question:
($foo eq "blah") ? @x = @somearray : @y = ("another","array");
Essayer de compiler ce code entraîne l'erreur "Assignment to both a list and a scalar at XXX line YY, near ');'
". En essayant de localiser la source de l'erreur, j'ai écrit ceci en utilisant deux manières différentes de représenter un tableau en Perl et ils reviennent tous avec la même erreur. Maintenant, au début, je pensais que c'était juste une erreur évidente stupide avec les instructions d'affectation, mais juste pour satisfaire ma curiosité, je réécris la déclaration d'une manière plus détaillée:
if($foo eq "blah") {
@x = @somearray;
} else {
@y = ("another","array");
}
Cette version du code compilé parfaitement bien.
Existe-t-il une fine distinction entre le fonctionnement de l'opérateur conditionnel et une instruction if-else de base qui me manque ici? J'ai toujours compris que l'opérateur conditionnel n'était qu'une version abrégée de la deuxième déclaration. S'il n'y a pas de différence fonctionnelle entre les deux, pourquoi Perl s'opposerait-il à la première déclaration, mais pas à la seconde?
Personnellement, je décrirais le deuxième code échantillon comme "plus clair" et "plus simple" plutôt que "verbeux". – qid
s/ternaire/conditionnel/!!! Il pourrait y avoir plus d'un opérateur ternaire. – Ether
Excuses, je n'ai certainement aucun problème avec la deuxième version et je ne jugerais pas une personne pour l'utiliser! Peut-être que «plus explicite» serait une meilleure façon de le dire, même si je ne voulais pas dire verbeux pour avoir une connotation négative. – warhorus