• [^] # Re: Qui code en perl ?

    Posté par (site web personnel, Mastodon) . En réponse à la dépêche Perl 5.36.0 est sorti. Évalué à 3.

    Pour la seconde partie, l'aspect débogage versus shell, il y a deux notions qui se chevauchent ici.

    La première, c'est d'avoir un interpréteur interactif (comme les dinosaures l'ont connu avec les BASIC de leur micro 8-bits.) Pour un langage interprété, c'est juste un REPL et c'est ça que j'appelle de façon impropre « environnement de débogage » : il faut comprendre débogage comme « exploration » (surtout essais ou prototypage pas à pas...) ; et c'est un peu comme ça que je comprends aussi « a comprehensive environment for interactive and exploratory computing. »
    PERL, comme d'autres, n'a jamais jugé utile d'intégrer cela dans son cœur (coucou PHP) ou de fournir une implémentation officielle (genre iperl) mais a laissé la communauté fournir plusieurs modules qui correspondent à autant de besoins et de visions qu'un seul truc central n'aurait pu combler (j'ai mentionné Perl::Shell et PerlConsole/console.pl mais il y aussi Reply et Devel::REPL/re.pl par exemple). Mais son mode débogage de base était assez puissant déjà :

    perl -de1

    La seconde notion (CLI) est toujours d'interpréter des commandes, mais cette fois-ci plus précisément de lancer les utilitaires/programmes (surtout en consoles/terminales pour simplifier) installés avec le système... d'exploitation. Ce programme fait aussi la police (s'assurer du respect des droits d'accès) et le chef d'orchestre (octroyer les entrées-sorties et faire les redirections.)
    Et là, justement j'ai par exemple l'utilitaire ls pour lister le contenu du répertoire courant. Avec IPython, je dois littéralement écrire mon programme pour faire la même chose

    from pathlib import Path
    for child in Path('.').iterdir():
     if child.is_file():
     print(f"{child.name}:\n{child.read_text()}\n")

    ...par exemple, ou alors

    import os
    path = "."
    obj = os.scandir()
    print("Files and Directories in '% s':" % path)
    for entry in obj:
     if entry.is_dir() or entry.is_file():
     print(entry.name)

    ...je ne peux pas juste appeler ma commande, même si dans le cas présent on peut se permettre de faire de manière crade :

    import os
    os.system('ls')

    ...mais en terme de nombre de lignes et caractères tapés ce n'est pas vraiment ça !

    "It is seldom that liberty of any kind is lost all at once." ― David Hume