[gull] Troll: Perl vs Python (was: Transtypage en Perl)

Félix Hauri felix at f-hauri.ch
Wed Jun 24 21:11:08 CEST 2009


On Wed, Jun 24, 2009 at 07:52:38PM +0200, Christian Kaenzig wrote:
> On Wednesday 24 June 2009 14:38:03 Frederic Schutz wrote:

> > >>      return unpack("N", pack("B32", substr("0" x 32 . shift, -32)));
> > Je n'ai pas encore réussi à décider si ta réponse était ironique ou non :-)
> 
> <troll>
> $ python
> >>> int("1000101101110",2)
> 4462

Vouis, a condition que la chaine binaire soit présentée du bit fort au bit
faible, comment présentes tu une chaine inversée?

$ perl -e 'printf "%s\n", unpack("S", pack("b16","0111011010001000"));'
4462
$ perl -e 'printf "%s\n", unpack("S", pack("B16","0110111000010001"));'
4462

Et si tu le fait en grand-indien plutot qu'en petit indien:
$ perl -e 'printf "%s\n", unpack("n", pack("B16","0001000101101110"));'
4462
$ perl -e 'printf "%s\n", unpack("v", pack("b16","0111011010001000"));'
4462

NB: Tous les exemples ci-dessus présentent les même bits, donc les
même résultats, mais la distribution des bits changent en fonction
de la convention appliquée.

Je dois dire que je n'apprécie pas toujours les contractions qui font
que sur ta ligne tu ne mentionne ni commande (say ou print), ni
methode de translation (little-endian, big-endian), ni d'ailleur
comment complêter ta string à 8,16 ou 32 bits, ni enfin si
la completion se fait à gauche ou à droite...

Bref, cela semble plus simple en python, comme ça, mais c'est lourd
de sous-entendus (ou manipulation tacites)...

De plus l'exemple de Fred présentait une solution utilisant ``say'',
fonction perl6 présente en ``backport'' dans perl5, d'où les quelques
lignes supplémentaires.

Enfin, comment fait un pythoniste pour lancer python en ligne de commande
et executer un truc tout simple comme:

$ perl -e 'printf "%s\n",join "\n",unpack("(B8)* ","RADIONUMÉRIQUE")'


-- 
 Félix Hauri  -  <felix at f-hauri.ch>  -  http://www.f-hauri.ch


More information about the gull mailing list