This channel is intended for people just starting with the Raku Programming Language ( Logs are available at
Set by lizmat on 8 June 2022.
stevied if you are coming from perl `||` is the same as `|`. On raku, `|` is longest match. Can be very confusing. 00:05
So back to my earlier question about too many open file handles. I got this: 00:09
for dir($path, test => { "$path/$_".IO.f } ) -> $file {
try {
my $r :=$file);
for $r -> $entry {
put $entry.pathname if $;
so this code works perfectly. But if I change the `$r :=` bit from a binding to a regular assignment, I run into the too many open file handles problem. I have no idea why this is so. Can someone clue me in? 00:10
jaguart what do I need to ger REPL up-arrow working again? 00:11
stevied I think linenoise 00:12
Nemokosch yes, Linenoise, Readline or Terminal::LineEditor. They are all a little different.
<@563790557831495691> not going to lie, this seems so mysterious that it could even be a resource leak type of problem by me 00:14
stevied yeah, I can't figure it out. I close it with `$r.close` so I'd think it wouldn't make a difference 00:15
jaguart `zef install Readline` -> another `===> Testing [FAIL]: Readline:ver<0.1.6>:auth<cpan:fooist>` 00:16
stevied I think you need the OS package readline. not sure, though 00:18
I think you need the OS package for readline. not sure, though 00:19
jaguart thing is it worked before uninstall/reinstall rakudo-pkg
so I doubt an os thing
Nemokosch yes, that's right, it's a huge heap of native stuff
stevied on a mac: 00:20
jaguart heres the failure message:
stevied apt-get on debian
Nemokosch well, if you have this many problems with the rakudo package, you could try to hit El_Che up
stevied raku readline module installed for me on my mac 00:22
what kind of machine are you on? 00:23
jaguart Debian stable, i7-9700, 32G RAM 00:24
Nemokosch <@563790557831495691> by the way... don't forget that a NativeCall library can be really troublesome if it's not done right 😅
stevied you follow the instructions at 00:27
jaguart Hmm: Parse errors: Subtest 5 expected 3 but contains 2 tests
stevied you have to install the libreadline7 package
jaguart I already have libreadline8:amd64 8.1-1 GNU readline and history libraries, run-time libraries 00:28
I found the issue
Nemokosch Do share 🙂 00:29
jaguart 02-base.t: some tests have been commented out - see above
Nemokosch hm, and this wasn't a problem before? 00:30
jaguart I think there are so many zef failures I was installing without tests - this time round I am being more careful
Nemokosch this is a good thing - it would be great to "unbreak" these tests 00:33
jaguart with this: t/02-base.t (Wstat: 0 Tests: 17 Failed: 0) Parse errors: Subtest 5 expected 3 but contains 2 tests 00:34
are the subtests numbered from 1?
if so I think it's the 'state' test line 68: 00:35
but that only has one test - and how does it know it wanted 3 - no plan 3; ? 00:36
Nemokosch same thoughts... 00:37
jaguart hmmm maybe its 'terminal' and not 'state' 00:40
Nemokosch I just cloned and zef test . passed... 00:43
it installed well, too
on Ubuntu 20.04 in WSL
jaguart this test is the problem: 00:45
It's not counted by the test harness, even though it emits success
Nemokosch is this a TAP issue, then? 00:46
--/tap-harness can turn it off iirc
jaguart yeah - that gets the tests to pass 00:47
I will add that to the list of things to try when installs fail 00:48
Nemokosch also, if you have enough data about it, consider opening an issue here 00:50
leont is about the most consistent module author, I would say. It wouldn't be in vain if there is actually a problem.
anyways, I'm off to sleep now 💤 00:52
jaguart thank you :) 00:55
01:09 Manifest0 left 01:17 saint- joined
jaguart stevied: I saw this and thought of you - - it's how gets all the META info etc. 01:21
rf How can I write a function that takes an "symbol" argument I think is what it's called, ie: 'h e l l o'.split(/\s/, :skip-empty); 02:01
MasterDuke that's a named argument 02:03
m: sub foo(:$bar) { say "bar is $bar" }; foo(:4bar) 02:04
camelia bar is 4
MasterDuke m: sub foo(:$bar) { say "bar is $bar" }; foo(:bar)  # if you don't them them an explicit type (or pass a value), they default to Bool and True 02:05
camelia bar is True
rf Hmm, that is how I implemented it but I am seeing a parameter error, must be somewhere else. Thanks!
stevied looks like the website 02:31
thanks. I actually just figured out a surefire way to find modules that need upgrading. I just go through REA and looks at the listings of each tar.gz file and look for files with .t, .pm or .pm6 extensions 02:33
jaguart yeah - in particular though they grab all the meta - which can have a few different names, and exist in different places in the tarballs etc. in effect they maintain a local ecosystem
oh - that sounds faster 🙂
stevied yeah, takes only a few seconds 02:34
there's 1451 modules that have old extensions. that's like 70%. 02:36
jaguart I thought there were only about 850ish distinct modules in the ecosystem? 02:38
stevied over 2000 02:39
though some of them might have multiple authors
so probably more like 1900
is catching a warning different than catching an exception? I can't seem to catch a warning 02:56
this is what I have:
try {
ver($file.Str).Version; 02:57
CATCH { default { say $file.Str } };
sometimes I get a "Use of Nil in string context" and I'm trying to figure out which file is causing it
rf Typically you can't catch warnings. Instead if you have some sort of warning or side-effect to relay use a promise or channel. 03:00
stevied hmm, I don't know anything about those
I just found this: but not sure how it can help me 03:01
rf In your case what sort of warning?
jaguart can you replace the global warn sub?
rf Huh I've never seen that caught before, but the docs seem to imply it can be caught
stevied see my post right below the code
jaguart you could add a backtrace... 03:02
stevied I only want to trigger the backtrace when there's a warning
i'm trying to figure out which out of thousands of files is triggering this error
or warning
jaguart eah - can you replace the global warn with a backtrace... 03:03
stevied I don't 'know. not sure how I would replace the global warn
jaguart dos say: To override this behavior, catch the warn exception in a CONTROL block 03:04
so you can catch the warning and add a backtrace in a CONTROL phaser 03:05
rf Nice find, there are some really cool Phasers out there
stevied oh interesting. didn't know phasers applied to errors/warnings 03:06
rf Yeah you can omit the try as well I believe 03:08
stevied oh nice, it worked. cool
i see the problem now. the file has an empty ver<> number in it. nice 03:09
03:16 rf left
got another edge case: 03:20
when CX::Warn { say $newest_file; .resume };
my $r :=$newest_file);
so one of the modules has utf8 characters in it: `Acme::ಠ_ಠ:ver<0.0.1>:auth<cpan:ELIZABETH>` 03:21
i guess that's a pair of eyes with eyebrows
anyway, it's causing the `my $r :=$newest_file);` line to choke 03:22
error is: `Pathname can't be converted from UTF-8 to current locale.` 03:23
jaguart what locale are you using?
stevied I don't know. not much of a shell guy 03:24
is it in an ENV variable?
jaguart `locale` -> LANG=en_AU.UTF-8 for me 03:25
stevied is that a shell env variable?
jaguart `which locale` -> `/usr/bin/locale` - but you can probably `env | grep LANG` 03:27
stevied ok, got this:
> $ locale [±main ●]
LC_COLLATE="en_US.UTF-8" 03:28
so that looks good
ok, got this:
> $ locale
jaguart maybe you need to let Libarchive know your locale
stevied yeah, let me check the docs for the module. I forgot to do taht 03:29
hmm, module only talks about utf-8 when extracting content from files 03:30
lemme check the source code of the module 03:31
error happens here, line 228: 03:32
can't really make heads or tails of that 03:36
archive_read_next_header2 is probably a native call
jaguart try this in your shell first? `export LC_ALL=en_US.utf8` 03:41
stevied thanks. no luck, though 03:42
jaguart this bug:
stevied oh interesting 03:43
the output of the `locale` command is the same when run from within the raku script. 04:09
jaguart yeah - I couldn't find the equiv of a native Raku setlocale() either - probably just expect you to manipulate your %*ENV 04:11
You could try `%*ENV<LC_ALL> = 'en_US.utf8'` 04:13
stevied this person says something about setting a global locale:
jaguart have you tried directly getting the specific archive details on the command line? 04:14
e.g. `tar -ztvf my-data.tar.gz` 04:15
stevied yes
it worked
jaguart so sounds like the libarchive library is not checking ENV for locale - grepped the Raku interface code and no occurrence of 'locale' - also didnt see that dist on -> do that one by hand? 04:19
stevied yeah, I could do it by hand. just curious at this point how this might be fixed. 04:20
jaguart libarchive v4?
stevied just a chance to learn something (and then forget about 2 weeks later)
jaguart or a setlocale() call in the Raku binding?
stevied this is the archive here:ಠ_ಠ 04:21
macos brew only has libarchive3, as far as I can tell 04:22
jaguart yeah - reported in 2015 -> went in the utf-8-is-hard bucket 🙂 04:23
stevied not seeing anything about setlocale for raku. how do I do that? 04:27
is that for c?
jaguart I like the module: `use Acme::ಠ_ಠ ; ಠ_ಠ 'you did what!?';`
yeah - there might be a call on libarchive that you can make to set the locale 04:28
This module should def be on zef and in - it's purpose is a test of unicode module names 04:29
stevied the acme one? 04:30
alright, spent enough time on this. going to post a question about this to SO and how the genii can buzz in and help my sorry ass out 04:37 04:53
alright, thanks for the help <@975405607513366631>. have a good night 04:54
or morning 🙂
05:40 Heptite left
Logomachist say "hello-test failed; \n timestamp = " ~ $<timestamp> ~ " name = " ~ $<name>; # Previous should have 06:04
07:00 Heptite joined 07:54 discord-raku-bot left, discord-raku-bot joined
Sparkill Hi, help me install Pop? 08:20
It tells me that I need dependencies but I can't install those versions.
``` zef install Pop
===> Searching for missing dependencies: Color:ver<1.002008>, TOML::Thumb:ver<0.1>:auth<zef:JRaspass>
===> Failed to find dependencies: Color:ver<1.002008>
Failed to resolve some missing dependencies (use e.g. --exclude="Color" to skip)```
08:23 discord-raku-bot left, discord-raku-bot joined 09:05 dakkar joined
Nahita hi <@346152867532505089> it seems like the module has `use Color;` in one place ( and it's to extend the Color class with some handy coercers. So that specific version doesn't seem critical and it doesn't seem to exist anyway perhaps the author should change it 09:14
so you can first install the Color module separately
then install Pop with --exclude="Color" as it says
09:15 Heptite left 09:18 ab5tract joined
actually it should be --exclude='Color:ver<1.002008>' 09:19
yeah it installed that way 09:22
and if you have SDL2 it should be all fine i think after that point 09:23
Nemokosch the situation will get better from now on: that version dates back to the p6c days where versioning wasn't really solved 09:25
09:32 Manifest0 joined
Sparkill hi <@836605577400549436> Thank you very much it worked! 🙂 09:34
Nahita oh cool! 09:39
Nemokosch can :e & :!f work for "this path object exists and it isn't a file"? 12:10
as a smartmatch
CIAvash yes? 12:47
Nemokosch well, I hope so 12:58
not sure how this works tbh 😄
jaguart I have a headful of questions about module :ver :api and :auth - when a module is installed, where does this come from? the META6? the code? 13:05
jaguart META6 has a 'provides' hash of module => compunit - can the module-key have :ver :api and :auth parts? 13:07
Nemokosch At this point, I think you have a broader picture of this than I do
I'm gonna try to look up a post from Nick 13:08
jaguart Do folks use any tooling to help manage this? and the flip `use xxx` ? 13:09
lizmat I use App::Mi6 for module development 13:10
it basically does everything apart from writing code and tests and documentation :-)
jaguart Yeah - I like mi6 - have submitted a pull-request to add customisable scaffolding, fingers crossed 13:11
Where do you put your :ver :api - in the META6 or in each compunit?
or is it automatic from the mi6 version bump? 13:12
Nemokosch well, at least you have some success with PR's for mi6 😅 13:13 I found something for you, by the way
jaguart grabs his reading specs 13:14
Nemokosch the TAP harness does kind of obfuscate errors apparently 13:16
jaguart my assumption is that the VT100.prepterminal test is emitting a control-char that confuses TAP's recognition of the OK. 13:27
The article indicates that :ver :api and :auth are all driven by META6 - which makes me wonder what happens when you put them actually inside the code :o 13:28
Thanks for that - it gives me a handle on setting up some testing to see what happens. 13:29
Nemokosch I'm trying to update the XML module and unless I turn the tap harness off, I can't really see the actual error even with --verbose on 13:30
not sure if that's a feature
jaguart yeah - I've learnt to use `raku -Ilib t/...` to see what's going on. 13:35
13:41 jgaz joined
jaguart so on :ver :api and :auth - zef install ALWAYS uses the META6 fields. 14:01
:ver and :version -> uses :ver
embeded :ver in the provides? -> ignored
:ver in the actual compunit -> ignored 14:02
oh - and :version but no :ver -> uses :version
so that's nice and easy - DONT put any :ver :api or :auth on classes / modules you create - its just confusing. 14:04
instead use them on your USE statements
ok - and mi6 - only checks the META6 :version -> it doesn't recognise :ver :( 14:16
14:20 saint- left
jaguart the docs all use `:version` with one main exception - they use `:ver<>` when specifying dependency information in the META6 14:22
stevied I wrote a little helper script that tweaks the module after mi6 sets it up on my local drive
jaguart interested - please share :)
stevied it's just an ugly perl script. doesn't do too much, but I can add to it if I need to. 14:23
jaguart I'm interested to know if you tweak the same bits that I do :) 14:24
stevied yeah, one sec. debian paste bin is down. i'll paste to github 14:26
so it sets up an xt folder with a test in it, sets up github for me, etc. 14:27
jaguart nice - I do the same changes to .gitignore, tweak the test.yml because of the Windows-TAP-install problem, fix the 'blah blah blah' in both main-module and meta6. 14:29
I tend to create the github repo via the web and then set the remote origin - `mi6` will update the META6 source-url automatically during build 14:31
only other comment is that you might want to add your Test::Output to your META6 test-depends - maybe :) 14:34
stevied I use comma IDE so it adds it in for me easily enough 14:35
this script probably could use some tweaks because I wrote it a while ago and not sure I know what I'm doing.
jaguart I struggle a but with Comma - I retry every now and then, just a week ago for example - but my fingers remember by fav editor better, and the auto reformatting drives me batty, and it seems to have a tanty if your desktop is windows but your rakudo is wsl. 14:37
stevied I can't use vim because it is way too slow with syntax highlighting turned on for any code above 75 lines 14:38
I turned off code wrapping in comma 14:39
and i use the ideavim plugin so I can still use vim keystrokes 14:41
jaguart Does comma have a c-tags equiv for Raku? i.e. backlink / nav to definition source? 14:42
stevied I'm almost sure it does but I never use ctags. I think I did play with it once 14:43
jaguart the Project thing is a pita - I work with several 'projects' at once and dislike having two windows instead of alt-tabbing
the file / Folder selection dialogs are a pain too - first thing I did was accidentally set the root of a 4TB disk as my project root - Comma went looking through a lot of files. 14:45
stevied yeah, the file explorer/finder seems broken. it never opens up where I want it to 14:47
you on linux gui? I'm sure there must be a way to cycle through open windows in the same application using the keyboard 14:54
14:59 rf joined
i just looked and comma has a shortcut for cycling between project windows 15:02
but anyway, all these tools have a pretty steep learning curve before you feel comfortable with them. easier to stick with what you know. 15:08
16:38 Heptite joined 16:44 NemokoschKiwi joined 17:36 dakkar left
p6steve my preference is to stick with vi and tab around (this is reinforced by my preference to install/run raku in a unbuntu VM) ... but, since I started to dig around in Comma, I have had a good look at IntelliJ Idea and now subscribe to and increasing use that for $day-job (because of ftp, git, html, css, js, php and so on) ... so I suspect that I will gradually pick up on Comma Plugin for IntelliJ and keep tr 17:53
IntelliJ Remote Gateway and/or Docker look quite interesting ... so I can combine the client editor goodness with the backend either in a Docker VM or in an (eg) AWS x86 instance ... BUT the combo of IntelliJ + vftools VM + remote gateway service is thrashing in my lowly MBA M1 8GB RAM ... maybe I will try again with AWS x86 clarge just for fun $$$ 17:58
17:59 NemokoschKiwi left
stevied how are you finding vim with raku? If I have more than 75 lines with a few nested loops, vim gets super slow and unusable? 18:05
how are you finding vim with raku? If I have more than 75 lines with a few nested loops, vim gets super slow and unusable
I have to turn off syntax highlighting, but syntax highlighting is a big crutch for me, especially with raku
Nemokosch 18:13
"you have syntax highlight for Raku?"
stevied yeah 18:23
rf Do you use treesitter? 19:31
p6steve I really don't like syntax highlighting - maybe all those years in the 80s staring a C 19:49
stevied no. fzf 20:48
I started on a green screen, apple //e. You could barely tell the difference between the number "1" and a lower case "l". I lost hours hunting that bug down one time. 20:50
the syntax highlighting gives you instant feedback when you are missing a delimiter or have some other kind of typo. I like it. 20:51
I guess the colors drive some people crazy.
the syntax highlighting gives you instant feedback when you are missing a delimiter or have some other kind of typo or syntax error. I like it. 20:52
someone must have done a productivity study on syntax highlighting 20:53 20:55
I've never seen some of these features. Stick scrolling?
I've never seen some of these features. Sticky scrolling? 21:09
Nahita wow 21:12
stevied did a litle more analysis. So 1347 modules still use the ".t", 241 use ".pm" and 869 use ".pm6" 21:48
so it's not quite as bad as it seems 22:06
rf stevied: I use neovim, I find it pretty snappy with 2-3k line files open 22:23
I can put my configuration on Git if you'd like as well 22:24
stevied I use that too 22:30
Do you do syntax highlighting?
Nemokosch does the bridge even get this sort of response across? 22:32
btw I thought ".t" can stay... 22:33
perhaps mi6 itself generates ".t" files
stevied dunno. i'll look into it 22:45
yeah looks like .t is not frowned upon: 23:17
I don't know. I'm still trying to figure that out 23:18
guess i should log into irc and find out
Nemokosch the logs might do 23:20
23:24 stevied_test joined 23:30 stevied_test left, stevied_test joined
stevied_test test 23:30
stevied does this notify me?
<@563790557831495691>_test 23:31
/stevied_test 23:32
ok, that actually works
23:32 jgaz left
/stevied_test this is another notification 23:32
/stevied_test or maybe not 23:33
ok, it does work
/stevied_test again 23:37