🔬 75. my $x = $x in Perl 6

What happens if you’ll try to create a new variable and immediately initialise it by itself, as shown in the following test code: my $x = $x; This does not work (which is expected), but Perl 6 is so kind to the user  that it gives an error message prepared especially for this case: ===SORRY!=== … Continue reading “🔬 75. my $x = $x in Perl 6”

🔬73. Keys, values, etc. of hashes in Perl 6

Today, we will take a look at a few methods of the Hash class that return all hash keys or values or both: > my %h = H => ‘Hydrogen’, He => ‘Helium’, Li => ‘Lithium’; {H => Hydrogen, He => Helium, Li => Lithium} > %h.keys; (H Li He) > %h.values; (Hydrogen Lithium Helium) … Continue reading “🔬73. Keys, values, etc. of hashes in Perl 6”

🔬71. Implementing Int.sleep() in Perl 6

Hello! Yesterday, I was giving my Perl 6 Intro course at the German Perl Workshop in Gummersbash. It was a great pleasure to prepare and run this one-day course, and, while it was difficult to cover everything, we touched all main aspects of the Perl 6 language: from variables to regexes and parallel computing. Of … Continue reading “🔬71. Implementing Int.sleep() in Perl 6”

🔬70. Examining the enum type in Perl 6

In Perl 6, you can create enumerations like this: enum colour <red orange yellow green blue violet>; Having this said, you can use the new name as a type name and create variables of that type: my colour $c; $c = green; say $c; # green say $c.Int; # 3 As you would rightly expect, … Continue reading “🔬70. Examining the enum type in Perl 6”

🔬68. The smartness of the sequence operator in Perl 6, part 1

In Perl 6, you can ask the sequence operator to build a desired sequence for you. It can be arithmetic or geometric progression. All you need is to show the beginning of the sequence to Perl, for example: .say for 3, 5 … 11; This prints numbers 3, 5, 7, 9, and 11. Or: .say … Continue reading “🔬68. The smartness of the sequence operator in Perl 6, part 1”

🔬67. Redeclaration of a symbol in Perl 6

Today, we will see how Perl 6 helps to keep our programs better. Redeclaration of a variable Examine the following program: my $x = 1; my $x = 2; say $x; You can immediately see that this program is not entirely correct. Either we meant to assign a new value to $x or to create … Continue reading “🔬67. Redeclaration of a symbol in Perl 6”

🔬65. The EVAL routine in Perl 6, part 2

Welcome back! As you might notice, there was a small gap in the daily post flow. Before we are back to the Rakudo internals, a couple of words about some changes here. First of all, every post is now marked with either 🦋 or 🔬 (or with indistinguishable rectangles □ if your browser cannot display an emoji :-). These … Continue reading “🔬65. The EVAL routine in Perl 6, part 2”

🔬61. Declared in BOOTSTRAP

First of all, a new release of the Rakudo Perl 6 compiler was announced today: 2018.02. There are many fixes and speed improvements there, including one proposed by me. Let me not go through the changes, as most of them require quite in-depth knowledge of the Rakudo internals. Instead, let us take a low-hanging fruit and … Continue reading “🔬61. Declared in BOOTSTRAP”

🔬60. Examining the Real role of Perl 6, part 3

As promised yesterday, let us take a look at the two methods of the Real role: polymod and base. polymod I already devoted a post to the Int.polymod method, but the method also exists in the Real role. Let us see if it is different. method polymod(Real:D: +@mods) { my $more = self; my $lazy = … Continue reading “🔬60. Examining the Real role of Perl 6, part 3”

🔬59. Examining the Real role of Perl 6, part 2

Today, we continue our initial exploration of the Real role, that was started a couple of days ago. Together with its methods, the role contains a number of subroutines (placed outside the role) that define the infix operators with the objects of the Real type. The list is not that long, so let me copy … Continue reading “🔬59. Examining the Real role of Perl 6, part 2”

🔬58. A word on polymod in Perl 6

Before moving to the second part of the Real role, let us stop on the polymod method of the Int class. The method takes a number and a list of arbitrary numbers (units) and returns the corresponding multipliers. So that you can easily say that 550 seconds, for example, is 9 minutes and 10 seconds: … Continue reading “🔬58. A word on polymod in Perl 6”

🔬57. Examining the Real role of Perl 6, part 1

During the last few days, we talked a lot about the Real role. Lets us then look at it more precisely. The code is located in the src/core/Real.pm file. It contains the role itself and a few subroutines implementing different infixes. The Real role in its turn implements the Numeric role: my role Real does Numeric { … Continue reading “🔬57. Examining the Real role of Perl 6, part 1”

🔬56. A bit more on Rat vs FatRat in Perl 6

Yesterday, we were digging into Rakudo Perl 6 to understand when a Rat value becomes a Num value. It turned out that if the value becomes too small, which means its denominator gets bigger and bigger, Rakudo starts using a Num value instead of Rat. We found the place where it happened. Today, let us … Continue reading “🔬56. A bit more on Rat vs FatRat in Perl 6”

🔬55. FatRat vs Rat in Perl 6

Yesterday, Solomon Foster posted an example in the Perl 6 group on Facebook: my @x = FatRat.new(1, 1), -> $x { $x – ($x ** 2 – $N) / (2 * $x) } … * This code implements Newton’s method of finding an approximate value of a square root of $N. The important thing is … Continue reading “🔬55. FatRat vs Rat in Perl 6”

🔬54. Going over the Bridge, part 2. Let’s get rid of it

Today, we continue working with the Bridge method in Rakudo Perl 6. Yesterday, we saw the definitions of the methods in a few pre-defined data types. It is time to see how the method is used. What’s inside? The major use of the method is inside the Real role, which contains the following set of methods: … Continue reading “🔬54. Going over the Bridge, part 2. Let’s get rid of it”

🔬53. Going over the Bridge, part 1

In the classes that handle numbers in Perl 6, we saw the Bridge method, which is used polymorphically. Let us spend some time and try to understand 1) how it works and 2) is it necessary. Classes and Roles Our first step is to look where the method is defined. Here is the list of … Continue reading “🔬53. Going over the Bridge, part 1”

🔬52. An attempt to understand how [*] works in Perl 6

Reduction operators are one of the many attractive features of Perl 6. A classical example is calculating factorial: say [*] 1..5; # 120 It is remarkable that in the AST output (generated with the –target=ast command-line option) you do not see any cycles. There is the METAOP_REDUCE_LEFT call, and obviously, the rest is hidden on the deeper … Continue reading “🔬52. An attempt to understand how [*] works in Perl 6”

🔬51. Colonpair in Perl 6’s Grammar, part 2

Today, we continue examining the colonpair syntax in Perl 6 and will give an addition to the third branch of the token. Here’s the branch we are looking at today: # branch 3 | <identifier> { $*key := $<identifier>.Str; } [ || <.unsp>? :dba(‘pair value’) <coloncircumfix($*key)> { $*value := $<coloncircumfix>; } || { $*value := 1; … Continue reading “🔬51. Colonpair in Perl 6’s Grammar, part 2”

🔬50. Colonpair in Perl 6’s Grammar, part 1

Welcome to the 50th post in this series! Today, we’ll talk about a small syntax construction, which is nevertheless is quite complicated in terms of Grammar. Let us look at the whole colonpair token first: token colonpair { :my $*key; :my $*value; ‘:’ :dba(‘colon pair’) [ | ‘!’ [ <identifier> || <.panic: “Malformed False pair; … Continue reading “🔬50. Colonpair in Perl 6’s Grammar, part 1”