Torbjørn Skrevet 14. mars 2005 Del Skrevet 14. mars 2005 venligst ikke bruk stick posten øverst, "geniale perlsnutter" til generelt forumsnakk, ta det her istedet map er veldig enkel å komme igang med, syntaks: map BLOCK LIST forståes slik, "kjør kodesekvensen i BLOCK" over hvert element i LIST" foreksempel, skrive ut elementer i en liste: perl -le 'map { print } (1,2,3,4)' print tar underforstått $_ som argument hvis ikke annet er angitt. $_ blir satt til respektive elementer i lista (her 1,2,3,4) perl -le 'map { print $_**2 } (1,2,3,4)' skriver ut kvadratet av alle tall i lista. perl -le '@array = map { ord } ("a","b","c")' lagrer numerisk verdi for tegnene @array. (97, 98 og 99) hver evaluering av BLOCK returnerer 1 eller flere elementer. (ikke noe iveien for å returnere en liste ved evaluering av hvert element) perl -le 'print $_ for map { $_,$_.$_ } ("a","b","c")' Lenke til kommentar
sam2 Skrevet 14. mars 2005 Del Skrevet 14. mars 2005 Torbjørn wrote: perl -le 'map { print $_**2 } (1,2,3,4)' Merk forøvrig at $_ er alias til elementene i listen..slik at vi faktisk endrer selve liste innholdet når kommandoen kjører.. Ikke alltid det vi ønsker. Forøvrig så har jeg hørt om steder der man *nektes* å bruke map kommandoen, pga den skaper kode som er vanskelig å vedlikeholde/lese.. En foreach loop er ofte et bedre valg.. Lenke til kommentar
Torbjørn Skrevet 14. mars 2005 Forfatter Del Skrevet 14. mars 2005 ønsker du å oppdatere innholdet i lista, er en forloop like så greit, og mer lesbar, som sam2 sier. hvis du trenger en modifisert liste kjapt og enkelt, ser jeg ikke noen grunn til å ikke bruke map. jeg laget i skrivende stund en funksjon slik: return @array[ map { $_-1} @_ ]; for å returnere elementer fra @array basert på eksterne indekser (teller fra 1 og oppover) istedet fra 0. anser dette som penre enn å endre $[. Lenke til kommentar
sam2 Skrevet 14. mars 2005 Del Skrevet 14. mars 2005 Hehe, takk Tobjørn. Bra eksempel på det som jeg nevnte med at map fort skaper uleselig kode.. men..kommer jo selføgelig ann på øyet som er.. Selv synes jeg denne er en mykje bedre variant: $_-- for (@_); return @array[@_]; enklere å se hva som skjer..selv om vi må bruke en linje ekstra: Er generellt skeptisk til å trekke sammen en haug av funksjoner på denne måten som du ofte har en tendens til å gjøre. Koden blir ofte obfu.. Når det er sagt, så kjører jo flesterparten av dine snutter fra kommando-linjen, slik at det er jo en formildende omstendighet Har erfaring med at når en skal se på koden noen mnd senere, så må en gruble og tenke mer enn det som burde være nødvendig for å skjønne/huske hva som egentlig foregår dersom vi koder på denne kompakte måten. (noe jeg forøvrig husker jeg så demonstrert med en kommentar du hadde i SMS klassen din Torbjørn..hehe..). Lenke til kommentar
mysjkin Skrevet 14. mars 2005 Del Skrevet 14. mars 2005 (endret) Sitat venligst ikke bruk stick posten øverst, "geniale perlsnutter" til generelt forumsnakk, ta det her istedet Selvfølgelig, du har rett Beklager. M. Edit: Takk for hjelp, forresten. Endret 14. mars 2005 av mysjkin Lenke til kommentar
Torbjørn Skrevet 14. mars 2005 Forfatter Del Skrevet 14. mars 2005 sam2 skrev: Hehe, takk Tobjørn. Bra eksempel på det som jeg nevnte med at map fort skaper uleselig kode.. Hehe, jeg syntes ikke den var så ille jeg men ;p Husker jeg hadde noe uforklarlig kode der et sted ja. Med korrekt og god dokumentasjon så kommer man langt dog. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå