Hi,

I was wandering if the following is an assignment or a binding (or binding of the entries);

my Hash $sleep-wait = { :s1(4.3), :s2(2.1), :s3(5.3), :s4(10.4), :s5(8.7),};

my Hash $sleep-left = $sleep-wait;



I noticed that in the following piece of code the $sleep-wait hash entries were set to 0 I had to explicitly do a copy to let it function correctly; 'my Hash $sleep-left = %(|$sleep-wait);'
Also cloning didn't work.


use v6;

my Hash $sleep-wait = {

  :s1(4.3), :s2(2.1), :s3(5.3), :s4(10.4), :s5(8.7),

};

my Hash $sleep-left = $sleep-wait;

loop {

  # get shortest sleep

  my $t = 1_000_000.0;

  my $s;

  for $sleep-left.keys -> $k {

    if $sleep-left{$k} < $t {

      $t = $sleep-left{$k};

      $s = $k;

    }

  }

  # set back to original time

  $sleep-left{$s} = $sleep-wait{$s};

  note "Reset entry $s to $sleep-left{$s} (from $sleep-wait{$s})";

  # adjust remaining entries

  for $sleep-left.keys -> $k {

    next if $s eq $k;

    $sleep-left{$k} -= $t;

    $sleep-left{$k} = $sleep-wait{$k} if $sleep-left{$k} <= 0;

  }

  note "sleep for $t sec, entry $s";

  sleep $t;

}


perl version;

This is Rakudo version 2018.12-363-ga1c2e20d7 built on MoarVM version 2018.12-117-gdcafbc4c7
implementing Perl 6.d.


Regards,
Marcel

Reply via email to