On 11/02/2020 14:14, David Santiago wrote: > Awesome explanation! Thank you! > > BTW, >> my Blob $read = Buf.new; > Is it creating either a Blob or a Buf? > > Regards, > David Santiago
Hi David, "my Blob $read" will define the variable $read to 1) only accept things that typecheck against Blob, and 2) has the starting value of Blob (the Blob type object). Assigning Buf.new to it will assign the newly created Buf object to the variable, because a Buf Is-A Blob (by the liskov substitution principle, everywhere you can use a Blob, you can also use a Buf, but not the other way around). BTW, assigning to a variable with a % or @ sigil behaves differently. That is called "list assignment" and will actually use whatever type the % or @ variable is defined to use (Hash and Array by default) and store the values from the right-hand side of the assignment into the existing object. This is why "my %foo = SetHash.new(<a b c>)" will result in a Hash. For this example, you would want "my %foo is SetHash = <a b c>" instead. Hope that clears things up - Timo