{"id":9,"date":"2008-09-24T17:04:00","date_gmt":"2008-09-24T17:04:00","guid":{"rendered":"http:\/\/www.vcrini.com\/impressioni\/?p=9"},"modified":"2008-09-24T17:04:00","modified_gmt":"2008-09-24T17:04:00","slug":"perl-e-lo-zen","status":"publish","type":"post","link":"https:\/\/www.vcrini.com\/impressioni\/?p=9","title":{"rendered":"Perl e lo zen"},"content":{"rendered":"<p>Di lavoro faccio il programmatore e ogni tanto mi balocco, nel tempo libero, con il mio coltellino svizzero: <span style=\"font-weight: bold;\">perl<\/span>.<\/p>\n<p>Oggi voglio mostrare come sia possibile con un istruzione piuttosto semplice fare una cosa che nei linguaggi tipo Java o C\/C++ \u00e8 molto tediosa.<\/p>\n<p>Supponiamo di dover generare una sequenza di numeri del tipo<\/p>\n<p>1  0<br \/>2  1500<br \/>3  3000<br \/>4  6000<br \/>5  15000<br \/>6  30000<br \/>7  50000<br \/>8  100000<br \/>9  200000<br \/>10  300000<br \/>11  400000<br \/>12  500000<br \/>13  600000<br \/>14  700000<br \/>15  800000<br \/>16  900000<br \/>17  1000000<br \/>18  1100000<br \/>19  1200000<br \/>20  1300000<br \/>21  1400000<br \/>22  1500000<br \/>23  1600000<br \/>24  1700000<br \/>25  1800000<br \/>26  1900000<br \/>27  2000000<br \/>28  2100000<br \/>29  2200000<br \/>30  2300000<br \/>31  2400000<br \/>32  2500000<br \/>33  2600000<br \/>34  2700000<br \/>35  2800000<br \/>36  2900000<\/p>\n<p>(chi indovina cosa potrebbero rappresentare? )<\/p>\n<p>cerchiamo di capire come potrebbe essere risolto. Innanzi tutto la struttura pi\u00f9 adatta che viene in mente \u00e8 quella di un array in cui in ogni posizione \u00e8 occupata dal valore sulla seconda colonna.<\/p>\n<p>Una soluzione banale \u00e8 dichiarare un array che contenga tutti i valori.<\/p>\n<p>@array=(0, 1500, 3000, 6000, 15000, 30000, 50000, 100000, 200000, 300000, 400000, 500000, 600000, 700000, 800000, 900000, 1000000, 1100000, 1200000, 1300000, 1400000, 1500000, 1600000, 1700000, 1800000, 1900000, 2000000, 2100000, 2200000, 2300000, 2400000, 2500000, 2600000, 2700000, 2800000, 2900000)<\/p>\n<p>ma la cosa oltre che essere lunghina \u00e8 poco <span style=\"font-style: italic;\">perlosa<\/span>.<\/p>\n<p>Ecco come potremmo procedere dopo aver fatto la seguente osservazione: la sequenza che va  da 0 fino al valore 100000 \u00e8 irregolare mentre successivamente raddoppia sempre.<\/p>\n<p>Dividiamo quindi il problema in 2 sotto problemi la prima e la seconda parte della stringa<\/p>\n<p>@prima=(0, 1500, 3000, 6000, 15000, 30000, 50000)<\/p>\n<p>e<\/p>\n<p>@seconda=(100000, 200000, 300000, 400000, 500000, 600000, 700000, 800000, 900000, 1000000, 1100000, 1200000, 1300000, 1400000, 1500000, 1600000, 1700000, 1800000, 1900000, 2000000, 2100000, 2200000, 2300000, 2400000, 2500000, 2600000, 2700000, 2800000, 2900000)<\/p>\n<p>per la prima parte c&#8217;\u00e8 poco da fare per\u00f2 pu\u00f2 essere scritta nella forma<\/p>\n<p>@prima=qw(0 1500 3000 6000 15000 30000 50000)<\/p>\n<p>per risparmiare leggermente qualche digitazione (e per scriverla anche in modo un po pi\u00f9 leggibile) altrimenti addirittura<\/p>\n<p>@prima=map{$_*100} qw(0 15 30 60 150 300 500)<\/p>\n<p>in cui si scrivono ancora meno caratteri grazie alla funzione <span style=\"font-weight: bold;\">map<\/span>  che consente di eseguire un&#8217;operazione su ogni elemento di una stringa e in questo caso moltiplica ogni elemento generato da qw(0 15 30 60 150 300 500) per 100.<\/p>\n<p>Sfruttando quest&#8217;ultima peculiarit\u00e0 basta osservare che l&#8217;array @seconda non \u00e8 altro che una successione di valori da 1 a 29 moltiplicati per 100000.<br \/>quindi posso scrivere<\/p>\n<p>@secondo=map{$_*100_000} (1..29)<\/p>\n<p>ed anche il secondo elemento \u00e8 generato.<\/p>\n<p>Quindi per concludere la lista dei valori viene generata da questa unica istruzione:<\/p>\n<p>@array=(map{$_*100} qw(0 15 30 60 150 300 500),map{$_*100_000} (1..29))<\/p>\n<p>un bel risparmio &#8230;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Di lavoro faccio il programmatore e ogni tanto mi balocco, nel tempo libero, con il mio coltellino svizzero: perl. Oggi voglio mostrare come sia possibile con un istruzione piuttosto semplice fare una cosa che nei linguaggi tipo Java o C\/C++ &hellip; <a href=\"https:\/\/www.vcrini.com\/impressioni\/?p=9\">Continua a leggere<span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_mi_skip_tracking":false},"categories":[11,10],"tags":[],"_links":{"self":[{"href":"https:\/\/www.vcrini.com\/impressioni\/index.php?rest_route=\/wp\/v2\/posts\/9"}],"collection":[{"href":"https:\/\/www.vcrini.com\/impressioni\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.vcrini.com\/impressioni\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.vcrini.com\/impressioni\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.vcrini.com\/impressioni\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=9"}],"version-history":[{"count":0,"href":"https:\/\/www.vcrini.com\/impressioni\/index.php?rest_route=\/wp\/v2\/posts\/9\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.vcrini.com\/impressioni\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=9"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.vcrini.com\/impressioni\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=9"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.vcrini.com\/impressioni\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=9"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}