This channel is intended for people just starting with the Raku Programming Language ( Logs are available at
Set by lizmat on 8 June 2022.
00:14 Heptite left 00:53 Manifest0 left 01:37 QhpAptyj9hj0RQwM left 03:29 razetime joined 03:42 Guest47 joined 04:22 Kaipei left 04:32 razetime left 05:22 razetime joined 06:35 razetime left 07:38 Kaipei joined 10:51 QhpAptyj9hj0RQwM joined 10:55 QhpAptyj9hj0RQwM left 10:56 QhpAptyj9hj0RQwM joined 12:10 subben-troska joined
subben-troska hello I have an issue trying to convert a json line into an hash... 12:12
# { id: 152, name: 'Kochstraße', type: 'PT', description: 'station', entries: 3 },
for stations.lines -> $station {
  if "id: 3" ~~ m:g/$<key>=\w+':'\s*$<value>=\d+/ {
    my %h = $/.hash;
sub stationer { 12:14
    return return q:to/END/;
  { id: 1, name: 'xxxxöö', type: 'TB1', description: 'surface', entries: 10 },
  { id: 2, name: 'yyyyåå', type: 'TB3', description: 'semi-surface', entries: 10 },
I can't make the global matching in conjunction with hash to work 12:15
I would like to access like "%h{'name'}", however I can't make it to work.. 12:18
Nemokosch isn't it a better idea to use a proper library for that?
subben-troska my original regex: /(\w+)\:\s*\'?(<[\w\s\-]>+)\'?/ 12:19
well.. in java it would be very easy :)
just using find() on matcher
I thought it used to be easy in perl5 12:20
which I stopped using in 2015
Nemokosch I'm not terribly fond of Java regex API but anyways, if there is a better choice, why suffer?
subben-troska suffer is living;-)  .. aaahhh it shouldn't be hard 12:21
its just a consecutive matcher of pairs to turn into a hash 12:22
Nemokosch perhaps it's not hard but please... if that's the only argument against using JSON::Fast...
subben-troska ok! I give up! I will go for your suggestion :)
I just saw it some 30 mins ago
lizmat use JSON::Fast; for station.lines { my %h := from-json($_) } 12:23
subben-troska Just to mention the format wasn't json from the beginning but the data is meant to be inserted in a TS mock application 12:24
thanks both of you discord-raku-bot (bot?) and lizmat!! you are my heroes (shouldn't waste too much Christmas-time with Raku-suffering) 12:26
Nemokosch by the way, I did start up a REPL to check what it returns 12:27
lizmat subben-troska: there's benefit in trying to do stuff yourself from scratch
subben-troska great :)
Nemokosch perhaps m:g always returns a List of matches?
lizmat but the JSON "standard" has all sorts of nooks and crannies, you seriously don't want to get into
Nemokosch and turning a one-element List into a Map... won't work out well 12:28
lizmat having spent quite some time on optimising JSON::Fast, I think I'm qualified to say that :-)
Nemokosch so if you wanted to m:g on all the lines, then you were pretty close probably 12:29
subben-troska nah... I used to be a perl5-geek digging deep.. now I am like a blank paper
Nemokosch it's just what you get is a list of matches, not a big match of lists
subben-troska uhu? list of matches 12:30
Nemokosch so you could call .hash on individual elements of that list, e.g with map or if you really feel like some cool APL folk, with the hyper meta-operator 12:31
subben-troska REPL.. is it regex perl or regex Raku.. I am always using rubular (by default)
Nemokosch what is rubular? 🤣 12:32
sounds like some old east-german truck
subben-troska well working at E/// back then in a test team we used that to check regex'es (while it doest work out for raku) 12:33 12:34
it's ruby?
Nemokosch seems like it is. Yet another language that is slightly getting nostalgic. 12:35
subben-troska "hyper-meta-operator"?
Nemokosch hyper is the name, if anything
subben-troska well my only tools at the moment is "comma-ct", is there a test regex-online (..well offline) for Raku? 12:36
Nemokosch I never tried this with a heredoc so wish me luck... 12:37
m: q:to/END/ ~~ m:g/$<key>=\w+':'\s*$<value>=\d+/;
{ id: 1, name: 'xxxxöö', type: 'TB1', description: 'surface', entries: 10 },
{ id: 2, name: 'yyyyåå', type: 'TB3', description: 'semi-surface', entries: 10 },
{ id: 3, name: 'tire', type: 'TB1', description: 'non-surface', entries: 2 },
dd $/>>.hash;
well, I did get a huge output 😄 12:38
perhaps dd was a bit overkill
m: q:to/END/ ~~ m:g/$<key>=\w+':'\s*$<value>=\d+/;
{ id: 1, name: 'xxxxöö', type: 'TB1', description: 'surface', entries: 10 },
{ id: 2, name: 'yyyyåå', type: 'TB3', description: 'semi-surface', entries: 10 },
{ id: 3, name: 'tire', type: 'TB1', description: 'non-surface', entries: 2 },
say $/>>.hash;
yeah, this is enough
I don't think the bot output gets posted on IRC but you can run the same thing, there is an evalbot on that end as well 12:39
subben-troska oki :)
..yeah.. ?! .. implementing .. (still slow with the MBP) 12:44
ok, so the problem is that the global matcher creates ONE hash for EACH PAIR instead of ONE hash for EACH SET of pairs? 12:50
( => 「id」, value => 「1」)) => 「entires」, value => 「10」)))
( => 「id」, value => 「2」)) => 「entires」, value => 「10」)))
( => 「id」, value => 「3」)) => 「entires」, value => 「6」)))
( => 「id」, value => 「4」)) => 「entires」, value => 「14」)))
Nemokosch what is MBP again? 12:52
I don't know, I don't see any problems 🙂 12:53
subben-troska MacBook I am a pc/linux guy
from the very start
   if $station ~~ m:g/$<key>=\w+':'\s*$<value>=\d+/ { 12:54
  say $/>>.hash;
  my %h = $/>>.hash;
  say %h{'id'}
Nemokosch haha, don't get me started on Apple
subben-troska ???
but the BATTERY life , the BEAUTIFUL screen .. its the perfect laptop, but my greedy company just let me off with a 14" :( 12:55
I haven't dusted off my hash'ing skills.. but the %h yields 'Any' for 'id' 12:56
( => 「id」, value => 「135」)) => 「gateCount」, value => 「5」)))
12:56 QhpAptyj9hj0RQwM left
Nemokosch I mean, the field name is "key", you yourself chose that 12:56
and it's still not a Map but a List of Maps 12:57
subben-troska oohhhh?!..oh 'key'.. well. aha .. key/value - right named capture
right got you it's a list of single entry maps
pity.. 12:58
Nemokosch > my %h = $/>>.hash;
this line is still sort of NFSW
hey, you *could* do what you actually want to do 12:59
subben-troska Its not really work its just me turning data to match the mocked data
of the react app
Nemokosch I think this is a good example of habits that drift one towards wrong solutions
subben-troska ok, how? a half-liner :-) 13:00
Nemokosch It seems you don't want multiple matches but one big match
subben-troska yeah I know I am sucker of cryptic solutions.. but it will not show in the real app
... we'll sort of one big match I am getting your point. 13:01
the lists should be merged into a map
Nemokosch it doesn't help with the case that you only want to match some arbitrary parts of the objects 13:02
subben-troska I thought that was possible, because I went from PERL5 to Java back in -15 and I thought of the transition and about the possibility to easily use hashes like in JAVA. but I can't remember PL5
Its all about matching pairs of k/v into map 13:03
ok! I get your point about arbitrary order..
Nemokosch I mean if you matched the whole thing, the named parts of that one match would be lists alright 13:04
but it's like match a little bit, then another little bit etc
subben-troska yes a list of unordered entries (which are in order)
I SHOULD turn into a complete regex matching the order right? 13:05
Nemokosch not just that. some keys aren't properly matched because their value is not integer
subben-troska not a global consecutive one.
Nemokosch and therefore there are gaps inherently
subben-troska yeah that why I had the optional \'? before and after
well it was in another regex.. 13:06
if $station ~~ m:global/(\w+)\:\s*\'?(<[\w\s\-]>+)\'?/ {
...which isn't working... its a conversion from a previous 13:07
non global context like; if $station ~~ m:global/(name)\:\s*\'?(<[\w\s\-]>+)\'?/ {
Nemokosch ' starts a string though, doesn't it 13:08
subben-troska regex's are much harder in PL6 than PL5. We actually had a PL5 course with Mäsak back than (from Edument) 13:09
Nemokosch '?(<[\w\s-]>+)'? is the string `?(<[\w\s-]>+)` optionally
subben-troska It was the ' that are optional around the values 13:10
Nemokosch I get that that was what you wanted but I doubt that's what you managed to express 13:11
13:11 jgaz joined
subben-troska Mmmmm... maybe its been a mess.. 13:11
Nemokosch I'd say the rules are fairly simple. Any character that isn't alphanumeric, must be escaped to be used literally. That's it.
you can escape it with the backslash or by *putting it into a string literal* 13:12
also, regex literals are whitespace-insensitive so you can write them in a way that doesn't look like a long hieroglyph 13:13
subben-troska allright.. sounds great.. I would really like to see a (laugh if you want, its on the house ;-) ) "rubular" for perl6.. besides REPL 13:14
ok? so no more \s'es then?
\s*+.. 13:15
Nemokosch that's not what I meant
By the way: what are your priorities? To solve a specific task or to get to know more about Raku regexes?
I mean both is fine but that decides how I try to govern the topic 😛 13:16
subben-troska well I would like to dust off perl and more over learn RAKU and how things works out
Nemokosch Okay, gotcha 13:17
subben-troska I am doing this undercover, some members of the team knows I am into this RAKU thing ;-)
Nemokosch disclaimer: the topic is covered in much greater detail in the docs - 13:18
now, the most important things about writing Raku regexes are: 13:20
- they are constructed with this regex language; prior to bleeding-edge works, a string literal and a regex literal had no connection to each other
- a regex literal can contain strings and even code blocks and it ignores whitespace 13:21
- alphanumeric characters don't have to be escaped but everything else (including whitespace) has to be
subben-troska great @Nemokosch my angry/tired gf just called to get picked up (from work) and I need to warm up my old limping French c4gp car so I have to leave for now.. 13:22
but I also got your last point about those two kinds of literals..
I am still here reading.. (there were some problems with the car .. lol)
Nemokosch for what it's worth, I tend to add everything as a string - except for the regex control characters I want to use in their special meaning
subben-troska ok.. in my case do you and for the moment recommend using json::fast?? just to not get further into some misconceptions like you are pointing out to me? 13:24
I want to get it right and according to your teaching :-)
I mean the way it works in RAKU.. correcgiton 13:25
Nemokosch you seem to be kind of a funny person lol
subben-troska I am dynamic
Nemokosch but it's okay, new year's eve is close
subben-troska yeah it is.. the code is always present to the mind 13:26
well I better be going, have a great NY eve, I will try myself ;-)
Nemokosch well, if what you want to process is valid JSON, that's probably the safest choice, and frankly it might even turn out to be faster, not sure about the implementation
subben-troska I'll have a go after the pickup 13:27
Nemokosch okay okay
take care
13:37 subben-troska left 14:29 Guest47 left 15:42 jgaz left 15:44 razetime joined 15:51 razetime left 15:55 razetime joined 17:58 razetime left 23:10 lizmat joined
I can't vouch for the books but there is the documentation itself 23:10
CodeTortoise Right. The website has a lot of examples, and the documentation is well done, so I should not have too much trouble finding answers to any questions I have. Raku seems to be anti-idiomatic, or pro-idiosyncratic, so I don't have to worry about style I guess. 23:13
23:53 lizmat_ joined, jgaz joined
Nemokosch also, feel free to ask if something is not clear. Mistakes are very much possible when you have a large language with a small crew 😛 23:56
23:56 lizmat left
CodeTortoise For sure! I mean, I have been in a kind of beginner's hell sampling languages when I got interested in programming like.. ten years ago. Never pursued it seriously, I mostly just enjoyed reading about different rationales and implementations, but just like learning an instrument, knowing how to make sounds but not how to play songs is terrible. 23:58