A votre avis, pourquoi est-il nécessaire de compiler un programme CL ? Tout simplement parce que CL supporte des variables. Sous le capot, chaque variable est en réalité une référence à une zone de mémoire différente où l’ordinateur stocke toute son information. Dans un programme CL, la commande doit
Pourquoi ne pouvez-vous pas spécifier LIB/OBJ dans une variable ?
être interprétée d’après les variables qui se trouvent dans toutes ces zones de mémoire différentes, au lieu d’analyser syntaxiquement une chaîne de commandes toutes tapées ensemble dans un endroit. Le code compilé fait très bien cela. Et les programmes CL sont alors un peu plus rapides que si l’on faisait la même chose à l’invite de commande.
Quand vous songez aux variables que vous devez passer à une commande telle que RUNQRY, vous devez vous demander : qu’est-ce que le compilateur CL attend de ma part ? Si vous codez une variable pour le paramètre OUTFILE(), le compilateur s’attend à ce que ce paramètre soit le nom de l’objet. Vous ne pouvez pas simplement lui ajouter une bibliothèque et espérer qu’il sait cela : en l’occurence, la bibliothèque fait partie de cette variable. La seule chose que le compilateur CL sait est que la première variable que vous passez est le nom d’objet. Quel que soit le contenu de cette variable, il est copié dans le paramètre nom d’objet du CPP pour cette commande. Pour qu’une partie des données soit passée au paramètre bibliothèque du CPP, le compilateur CL attend de vous que vous spécifiiez une variable séparée.
Vous devez donc faire ce qu’il attend. Cependant, il y a quelques possibilités de contournement. Tout d’abord, vous pouvez, par programme, diviser le paramètre en deux variables séparées et les passer. Pour cela, recherchez par balayage le caractère « / ». S’il existe, mettez tout ce qui se trouve à sa gauche dans une variable et tout ce qui se trouve à sa droite dans une seconde variable. Passez ces deux variables comme le nom de bibliothèque et d’objet. Le programme de la figure 1 démontre cette technique. Deuxièmement, au lieu de vous battre avec le compilateur CL, créez manuellement la chaîne de commandes en copiant les valeurs des variables. Vous pouvez créer une chaîne de commandes dans une instruction CHGVAR, y concaténer les variables puis l’exécuter avec QCMDEXC. QCMDEXC analysera la chaîne de commandes au moment de l’exécution, exactement comme elle le fait quand vous la tapez sur la ligne de commande. Le programme de la figure 2 démontre cette technique.
Par Scott Klement
Téléchargez cette ressource

État des lieux de la réponse à incident de cybersécurité
Les experts de Palo Alto Networks, Unit 42 et Forrester Research livrent dans ce webinaire exclusif leurs éclairages et stratégies en matière de réponses aux incidents. Bénéficiez d'un panorama complet du paysage actuel de la réponse aux incidents et de sa relation avec la continuité de l'activité, des défis auxquels font face les entreprises et des tendances majeures qui modèlent ce domaine. Un état des lieux précieux pour les décideurs et professionnels IT.