Et moi je te dis que c'est idiomatique. Et citer Perl n'est pas forcément une bonne façon de donner du crédit à ton opinion : les gens que j'ai vus critiquer ce langage font partie (la plupart du temps) de ceux qui voudraient que Perl s'écrive comme du C, sans tenir compte — tadaaaa ! — des idiomes propres au langage. Si j'écris
#!/usr/bin/perlusestrict;usewarnings;useCarpqw/croak/;croak"USAGE: 0ドル <filename>"unless(@ARGV);open(my$fh,'<',$filename)ordie"Couldn't open $filename: $!";my$file_content;{local$/;$file_content=<$fh>;}do_something_with($file_content);
... Oui, j'estime que $/ et $! font partie des variables de Perl à connaître. De même qu'en C, si j'écris :
#define fatal(...) do { \ fprintf(stderr,__VA_ARGS__); \ if (errno != 0) perror(errno); \ exit(errno); \} while(0)staticinlinevoiddo_something_with(char*string,off_tsz){string[sz-1]='0円';puts(string);}intmain(intargc,char**argv){if(argc!=2)fatal("USAGE: %s <filename>",argv[0]);char*filename=argv[1];intfd=open(filename,O_RDONLY);if(fd==-1)fatal("Couldn't open %s",filename);structstatfile_info;fstat(fd,&file_info);off_tsz=file_info.st_size;char*file_content=malloc(sz);if(file_content==NULL)fatal("Couldn't allocate string of size %lu",sz);intnbytes=0;do{nbytes=read(fd,file_content,sz);}while(nbytes==-1&&errno==EINTR);if(nbytes==-1)fatal("Couldn't read %lu bytes from %s\n",sz,filename);do_something_with(file_content,sz);free(file_content);return0;}
J'estime que le lecteur doit savoir ce que malloc signifie, qu'il sait faire un man fstat s'il n'a jamais rencontré la fonction en question (de même que pour un programme Perl on appellerait perldoc -f *fonction* ou perldoc -q *expression*), etc. Si je voyais ce code pour la première fois, je me demanderais sans doute pourquoi le programmeur s'est fait chier à écrire le read dans un block do-while aussi bizarre1. Bref, il s'agit de connaître le langage qu'on utilise (pour lire ou écrire).
Donc, histoire d'enfoncer le clou sur cette histoire de décider que Perl est illisible/write-only/bla par définition, je maintiens que quelqu'un qui n'a (par exemple) jamais programmé en C ou en Perl, mais a de l'expérience en Common LISP par exemple, aura sans doute autant de mal à piger un programme que l'autre.
[1] Note que je ne dis pas que cette manière d'écrire soit top-moumoute. C'est juste un exemple à la con qu'on peut trouver (même si généralement des fonctions d'adaptations du genre xmalloc ou xread sont créées pour masquer ce genre de mécanique).
[^] # Re: Ca traduit bien un état d'esprit de la part des développeurs de systemd
Posté par lasher . En réponse au journal Systemd vs Linux, quand l'intransigeance d'un développeur tourne au ridicule.... Évalué à 2.
Et moi je te dis que c'est idiomatique. Et citer Perl n'est pas forcément une bonne façon de donner du crédit à ton opinion : les gens que j'ai vus critiquer ce langage font partie (la plupart du temps) de ceux qui voudraient que Perl s'écrive comme du C, sans tenir compte — tadaaaa ! — des idiomes propres au langage. Si j'écris
... Oui, j'estime que
$/et$!font partie des variables de Perl à connaître. De même qu'en C, si j'écris :J'estime que le lecteur doit savoir ce que
mallocsignifie, qu'il sait faire unman fstats'il n'a jamais rencontré la fonction en question (de même que pour un programme Perl on appelleraitperldoc -f *fonction*ouperldoc -q *expression*), etc. Si je voyais ce code pour la première fois, je me demanderais sans doute pourquoi le programmeur s'est fait chier à écrire le read dans un blockdo-whileaussi bizarre1. Bref, il s'agit de connaître le langage qu'on utilise (pour lire ou écrire).Donc, histoire d'enfoncer le clou sur cette histoire de décider que Perl est illisible/write-only/bla par définition, je maintiens que quelqu'un qui n'a (par exemple) jamais programmé en C ou en Perl, mais a de l'expérience en Common LISP par exemple, aura sans doute autant de mal à piger un programme que l'autre.
[1] Note que je ne dis pas que cette manière d'écrire soit top-moumoute. C'est juste un exemple à la con qu'on peut trouver (même si généralement des fonctions d'adaptations du genre
xmallocouxreadsont créées pour masquer ce genre de mécanique).