This channel is intended for people just starting with the Raku Programming Language ( Logs are available at
Set by lizmat on 8 June 2022.
lizmat it's a meta-op, just like += or *= 00:17
00:37 deoac joined
deoac m: say 'abcde' ~~ m:ex/ \w ** 2..4/ 00:37
camelia (「abcd」 「abc」 「ab」 「bcde」 「bcd」 「bc」 「cde」 「cd」 「de」)
deoac m: my $min = 2; my $max = 4; say 'abcde' ~~ m:ex/ \w ** {$min..$max} / 00:38
camelia (「abcd」 「abc」 「ab」 「a」 「bcde」 「bcd」 「bc」 「b」 「cde」 「cd」 「c」 「de」 「d」)
deoac Why the difference?  Why does the latter match a single character? 00:39
guifa_ that's definitely an error 00:43
And it goes back a good ways
deoac Is it expected to be corrected in v6.e? 00:46
guifa_ No idea -- is there a bug report for it? 00:47
There are a lot of weird optimizations for regex and I'd bet that the range one somehow trips it up when ex is activated 00:49
deoac Bug reports are above my pay grade! 00:57
guifa_ will try to remember to make one
01:01 Heptite joined
Anton Antonov @deoac Filing or fixing? 01:29
deoac Both.  How do I file a bug report? 01:40
Anton Antonov @deoac So, you want pay-raise? 01:42
@deoac Hmm... you want for file core Raku / rakudo bug report, right? 01:43
deoac Yes.  Are there other kinds of bug reports. 01:44
Anton Antonov @deoac Yeah for packages, etc. It seems the you could / should file an issue at GitHub : . 01:46
@deoac Here are the related guidelines : . 01:48
deoac Thanks, I'll look into that tomorrow. 01:49
How would I find out if this bug report already exists? 01:50
Anton Antonov Well, please go to and search. (Both open and closed.) 01:51
deoac I'll let you know what I find/do 01:55
02:05 Manifest0 left
rf How can I combine 2 slips 02:44
m: my @a = 1,2,3,4; my @b = 5,6,7,8; my @c =|@a, |@b);
camelia ( no output )
rf m: my @a = 1,2,3,4; my @b = 5,6,7,8; my @c =|@a, |@b); say @c;
camelia [1 2 3 4 5 6 7 8]
rf Ok this isn't working for me for some reason in my code
MasterDuke you can't/don't want to use .append? 02:48
Anton Antonov @rf maybe just [|@a, |@b] . 02:53
rf I can't use append because I need one to be immutable 02:54
Well.. immutable in this certain circumstance. Yeah the error was in a different part of the code, for some reason I thought it was this. 02:55
02:59 deoac left 04:16 rf left 06:34 MasterDuke left 10:10 Manifest0 joined
snonux hey, how can i pass an Int to MAIN from the command line? sub MAIN (Int :$foo = 13) { $foo.say; } doesn't seem to work when in run my script with 'raku foo.raku --foo 42'; I think it's because 42 is interpreted as a Str, and therefore the MAIN signature doesn't match! The example works when I change the signature to sub MAIL (Str :$foo = '13') { $foo.say }; 11:43
el gatito (** advocate) you need to coerce it to Int 11:45
snonux i can cast it to Int afterwards. or is there a way to do it directly in the MAIN signature? 11:47
ab5tract snonux: you can coerce in the signature with Int()
that way if the candidate can coerce to Int, it will 11:48
you can also make it targeted against a single candidate class, such as Int(Str), but that is a bit less common
el gatito (** advocate) ``` sub MAIN(Int(Str) :$foo = 13) { $foo.say } 11:49
ab5stract: i thought its the opposite
ab5tract what, that it's less frequent to leave the candidate open? 11:52
gfldex Since MAIN will always be called with Str-arguments, Int(Str) is redundant. 11:53
If at all, use Int(Str:D) or you may end up with a 0 you don't want.
snonux ❯ /bin/cat foo.raku 11:54
sub MAIN(Int(Str) :$foo = 13) {
say $foo;
say $foo.WHAT;
paul in earth in /tmp
❯ raku foo.raku --foo=121212
ab5tract It's more of a gradual typing approach to just use Int(), but that's really a matter of personal preference
snonux 121212
yeah, seems to work. i guess IntStr is a type which is both, Int and Str. 11:55
ab5tract yeah, that's correct. It's an allomorph. You can safely use `$foo` in both numeric and string contexts without anything complaining
snonux nice, thanks ab5tract
Int() seems better, as Int(Str) is redundant. thanks! 11:56
Nemokosch can't you just use Int? 11:57
and if you can't, that's arguably a bug
el gatito (** advocate) no i mean i thought the syntax is Str(Int) 11:58
Nemokosch Str(Int) = "get me a Str from an Int"
ab5tract It's the other way around. 11:59
Int() = coerce all candidates that implement an Int coercion to Int
el gatito (** advocate) Int = no coercion 12:00
ab5tract Int(Str) = coerce only Str candidates to Int
Nemokosch yes, it should work with no coercion
ab5tract Nemokosch: hard disagree 12:01
Nemokosch I mean, it literally does work when it's not bugged
this is not a matter of opinion
ab5tract what are you talking about?
Nemokosch you can just use Int parameters in the MAIN 12:02
ab5tract m: sub f(Int $i) { dd $i}; f(5); f("5")
camelia ===SORRY!=== Error while compiling <tmp>
Calling f(Str) will never work with declared signature (Int $i)
at <tmp>:1
------> sub f(Int $i) { dd $i}; f(5); ⏏f("5")
Nemokosch that's not MAIN
ab5tract Yeah, but what you are suggesting is wrong. MAIN inputs are always strings 12:03
nothing is special-cased about its handling except for that it runs when you run the script
otherwise it would be broken
Nemokosch from the perspective of the callee, they are not
ab5tract they clearly are
Nemokosch m: sub MAIN(Int $foo, Str $) { dd $foo } @*ARGS=<42 11>; 12:04
Raku eval, "42")
Nemokosch BRUH
yes, it does work with Int, like it always did 12:05
ab5tract chill, please
Nemokosch then please at least check what you are saying before you get confident about it
ab5tract we can all be wrong without being rude to each other 12:06
Nemokosch or we can be humble about something we aren't actually sure of... 12:07
ab5tract I can see now why people say you make this all a lot less fun 12:08
Nemokosch you just made a blatantly wrong statement with full confidence, why make this about me? 12:09
ab5tract I made an error. I'll admit it. I'd ask why you have to be so aggressive but I don't think I will continue responding to you 12:10
Nemokosch well it does happen that somebody loses patience when somebody denies commonsensical reality in the most declarative way, sorry if this hurts so much 12:11
ab5tract If no one can be wrong without being attacked and belittled by you, there will necessarily be a chilling effect in every channel you are in 12:13
lizmat Zephyr 12:15
Nemokosch I don't think it's an attack to say that somebody was too wrong for this amount of confidence 12:16
lizmat Nemokosch your amount of right becomes meaningless if nobody wants to interact with you anymore 12:17
and you appear to have a way of behaving online that is perceived by people as attacks 12:18
that *should* make you wonder
Nemokosch It shouldn't even be necessary to say that one needs to check their facts before getting protective about them
should I also take it as an attack that I said something true and it was discarded with little reasoning? does that change a lot? 12:19
lizmat I'm not getting into an argument with you 12:20
I won't be the frog in
Nemokosch You don't have to. Just please, if you know how to tell somebody kindly that they are wrong, go ahead and do so, for everyone's benefit. 12:22
lizmat this isn't about content, this is about your online behaviour
Nemokosch and I'm not gonna engage in another lesson like that. Have a nice day 12:23
lizmat You too 12:26
el gatito (** advocate) why all MAIN inputs are strings 12:27
lizmat well, the situation is slightly more complicated
yes, the command line only supplies strings 12:28
however each string is processed by val() before given to MAIN dispatch
which, BTW, is also what <foo bar> does by default 12:29
m: dd <foo 42 bar>
camelia ("foo",, "42"), "bar")
lizmat note that the "42" turned into an allomorph
and that *will* dispatch correctly to a Int candidate 12:30
and it will dispatch to a Str if there is no Int
m: sub a(Int $a) { dd $a }; a "42" 12:31
camelia ===SORRY!=== Error while compiling <tmp>
Calling a(Str) will never work with declared signature (Int $a)
at <tmp>:1
------> sub a(Int $a) { dd $a }; ⏏a "42"
lizmat m: sub a(Int $a) { dd $a }; a <42>
camelia, "42")
lizmat m: sub a(Str $a) { dd $a }; a <42>
camelia, "42")
lizmat so Nemokosch example was dubious, as it supplied allomorphs, rather than Ints 12:32
m: sub MAIN(Int $foo, Str $) { dd $foo } @*ARGS="42",11
camelia ===SORRY!=== Error while compiling <tmp>
Strange text after block (missing semicolon or comma?)
at <tmp>:1
------> sub MAIN(Int $foo, Str $) { dd $foo }⏏ @*ARGS="42",11
expecting any of:
infix stopp…
lizmat m: sub MAIN(Int $foo, Str $) { dd $foo }; @*ARGS="42",11
camelia This type cannot unbox to a native string: P6opaque, Int
in block <unit> at <tmp> line 1
lizmat m: sub MAIN(Int $foo) { dd $foo }; @*ARGS="42" 12:33
camelia, "42")
lizmat intriguing
el gatito (** advocate) allomorphs be like 12:34
lizmat yeah... ok, looks like &RUN-MAIN by default does coercion to allomorphs 12:35
ab5tract I wonder how hard it would be to wire up the val behavior for named arguments. I almost always use named arguments, especially with type constraints, so I don't remember encountering this case before
lizmat doesn't it do so already? 12:36
ab5tract Which led to my (wrong) assumption that dispatch to MAIN is the same as to any old sub
lizmat: nppe, that's how we got into this discussion :) 12:37
el gatito (** advocate) yet another weak typing Str coercing to Int via IntStr when you don’t want to
lizmat m: sub MAIN(|c) { dd c }; @*ARGS="--foo=42"
camelia \(:foo(, "42")))
lizmat nameds are already converted to allomorphs ?
ab5tract m: sub MAIN(|c) { dd c }; @*ARGS="--foo 42" 12:38
camelia \("foo 42" => Bool::True)
ab5tract maybe it was because he didn't use an equals sign
lizmat yes, you need an equal sign in default RAKU arg passing 12:39
el gatito (** advocate) what happened with raku argparsing
ab5tract m: sub MAIN(Int :$foo) { dd $foo }; @*ARGS="--foo 42"
camelia Usage:
<tmp> [--foo[=Int]]
ab5tract m: sub MAIN(Int :$foo) { dd $foo }; @*ARGS="--foo=42"
camelia, "42")
ab5tract yup, that must have been it
snonux: ^^
el gatito (** advocate) it should be parsed as (42, foo => True)
lizmat m: m: sub MAIN(Int :$foo) { dd $foo }; @*ARGS="--foo","42" 12:40
camelia Usage:
<tmp> [--foo[=Int]]
lizmat m: m: sub MAIN(|c) { dd c }; @*ARGS="--foo","42"
camelia \(, "42"), :foo(Bool::True))
lizmat like that ?
in standard arg parsing, a variable name cannot have a space in it
ab5tract el gattito: yeah, my example was a bit broken 12:41
snonux paul in earth in /tmp took 4s
❯ raku foo.raku --foo=121212
paul in earth in /tmp
❯ raku foo.raku --foo 121212
foo.raku [--foo[=Int]]
lizmat so if you set up @*ARGS incorrectly in these examples...
snonux zsh: exit 2 raku foo.raku --foo 121212
okay, the '=' has to be added
Nemokosch consider checking out the Getopt::Long module 12:42
lizmat if you want more "standard" arg passing, have a look at
afk for a bit again&
el gatito (** advocate) raku argparse is not standard lmao
snonux i like the raku built-in, the fewer external dependencies, the better :-)
i think the getopt long is following a GNU standard. but i don't persist on GNU standards. 12:45
el gatito (** advocate) funi C:\Users\jack9\Documents\raku>raku argparse.raku 42 --foo \(, "42"), "--foo") 13:02
ab5tract el gatito: does your argparse.raku use `named-anywhere` ? 13:06
el gatito (** advocate) no 13:12
ab5tract that's the first thing I setup if I'm mixing positional and named arguments 13:15
el gatito (** advocate) short options is not treated differently smh PS C:\Users\jack9\Documents\raku> raku argparse.raku -abc \(:abc(Bool::True))
you have to enable it in %*SUB-MAIN-OPTS
ab5tract yeah, bundling 13:16
el gatito (** advocate) with that enabled it just introduce another issue PS C:\Users\jack9\Documents\raku> raku argparse.raku --abc \(:abc(Bool::True)) 13:19
-abc is the same as --abc somehow
15:31 rf joined 19:25 theesm left 19:27 theesm joined 19:35 deoac joined 19:40 ab5tract left 20:05 deoac left 23:39 deoac joined