LX-PERL-INFO-arrays-hashes
Updated aug/02/2010 20:18

arrays en hashes

Een lijst is een geordende verzameling van scalars.
Een array is die variabele waarin die lijst zit.
Een scalar is een waarde (type string, integer of real); zo'n waarde zit in elk element van de array.
Een index is het volgordenummer van een element uit de array.
Een hash is een array waarbij indexen vervangen zijn door scalar keys.

arrays

  1. toewijzing

    @datum = ("jan","01","2010");

    of ook

    $datum[2] = "2011";
    $datum[0] = "feb";
    $datum[1] = "29";

  2. uitlezen

    print "$datum[2] \n";

    drukt de waarde 2011 af.

    $jaar = $datum[2];
    $maand = $datum[0];
    $dag = $datum[1];

  3. andere gegevens

    hoogste index: $#datum

    print "$#datum \n";

    geeft als waarde 2

    pas op:

    @maanden = ("jan" , "feb" , "mar" , "apr" , "mei" , "jun" , "jul" , "aug" , "sep" , "okt" , "nov" , "dec" );

    print $#maanden;

    geeft als waarde 11 (we beginnen te tellen bij nul)

    $maand[85] = "bor";

    print $#maanden;

    geeft als waarde 85 (de hoogste index, niet het aantal elementen)


  4. push en pop, shift en unshift

    De pop operator levert het laatste array element op, en verwijdert het.
    De push operator voegt een element toe, achteraan de array.

    De shift operator levert het eerste array element op, en verwijdert het.
    De unshift operator voegt een element toe, vooraan de array.

    voorbeeld:

    #!/usr/bin/perl
    #
    # poppush: voorbeeld met pop en push op arrays
    #
    @matrix = ( aap , noot , mies , maan , roos , vis );
    print "De originele lijst: @matrix\n";
    $laatste_woord = pop(@matrix);
    print "De lijst gepopt: @matrix\n";
    print "de inhoud van variabele laatste_woord: $laatste_woord\n";
    pop(@matrix);
    print "De lijst gepopt zonder toewijzing: @matrix\n";
    push(@matrix, vuur);
    print "De lijst gepusht met vuur: @matrix\n";
    push(@matrix,$laatste_woord);
    print "De lijst gepopt met laatste_woord: @matrix\n";
    $eerste_woord=shift(@matrix);
    print "De lijst geshift: @matrix\n";
    print "de inhoud van variabele eerste_woord: $eerste_woord\n";
    unshift(@matrix, pim);
    print "De lijst geunshift met pim: @matrix\n";
    unshift(@matrix,$eerste_woord);
    print "De lijst geunshift met eerste_woord: @matrix\n";

    output
    :

    $ poppush.pl
    De originele lijst: aap noot mies maan roos vis
    De lijst gepopt: aap noot mies maan roos
    de inhoud van variabele laatste_woord: vis
    De lijst gepopt zonder toewijzing: aap noot mies maan
    De lijst gepusht met vuur: aap noot mies maan vuur
    De lijst gepopt met laatste_woord: aap noot mies maan vuur vis
    De lijst geshift: noot mies maan vuur vis
    de inhoud van variabele eerste_woord: aap
    De lijst geunshift met pim: pim noot mies maan vuur vis
    De lijst geunshift met eerste_woord: aap pim noot mies maan vuur vis

    Zoals u merkt in het voorbeeld wordt het @-teken ook geinterpreteerd door de dubbele quotes. Pas dus op met email adressen tussen ""

  5. reverse en sort

    reverse wijst de omgedraaide array toe aan een andere array.
    sort wijst een gesorteerde array toe.

    voorbeeld:

    #!/usr/bin/perl
    #
    # revsort: voorbeeld met reverse en sort op arrays
    #
    @matrix = ( aap , noot , mies , maan , roos , vis );
    print "De originele lijst: @matrix\n";
    @xirtam=reverse(@matrix);
    print "De lijst omgedraaid: @xirtam\n";
    @aimrtx=sort(@matrix);
    print "De lijst gesorteerd: @aimrtx\n";

    output:

    $ revsort.pl

    De originele lijst: aap noot mies maan roos vis
    De lijst omgedraaid: vis roos maan mies noot aap
    De lijst gesorteerd: aap maan mies noot roos vis

  6. array leegmaken

    @matrix=();

hashes of associative arrays

We kunnen in Perl ook arrays maken waarbij we zelf de index een naam mogen geven:

  1. toewijzing

    %datum2 = ( 'maand' => "jan",
                'dag'   => "01",
                'jaar'  => "2010" );


    of ook

    %datum2 = ( 'maand' , "jan" , 'dag' , "01" , 'jaar' ,"2010" );

    Ik heb in beide gevallen zelf gekozen voor 'single quotes' voor de hash keys,
    en voor "double quotes" voor de values (waarden).
    Het komt de leesbaarheid, vooral in het tweede geval, ten goede, maar het is niet verplicht.

    We kunnen ook nog het volgende toevoegen:

    $datum2{uur} = "15";

  2. uitlezen

    print "$datum2{maand} \n";

    drukt de waarde jan af.

  3. delete

    Uit een hash kunnen we elementen verwijderen als volgt:

    delete $datum2{uur};

    Dit verwijdert zowel de key als de value.

  4. keys

    Als we straks in een for-loop een hash willen uitlezen, hebben we geen tellende index. Met de funktie keys halen we alle indexen uit een hash.

    voorbeeld
    :

    for (keys %datum2) {
    print "$_ is gelijk aan $datum2{$_}\n";
    }

    for doorloopt alle waarden van keys en stopt die telkens in $_
    $_ is de default variabele van Perl die vooral in loops van pas komt.