»ö« Welcome to Perl 6! | perl6.org/ | evalbot usage: 'p6: say 3;' or rakudo:, or /msg camelia p6: ... | irclog: irc.perl6.org or colabti.org/irclogger/irclogger_logs/perl6 | UTF-8 is our friend!
Set by moritz on 22 December 2015.
timotimo at least they had lots of space on the discs for code ... except they put lots of FMV in there :D 00:01
pilne and they were limited on how much they could cram in the RAM as well, it really was quite a feat 00:02
timotimo oh, of course 00:04
i didn't consider that
pilne although i still have a code-crush on mr. carmack of Id fame 00:05
timotimo he's a cool one 00:06
ugexe geekosaur: `PERL6LIB="inst#/home/perl6/custom" perl6 -e "use Text::Table::Simple; say 'ok'"` or `PERL6LIB="CompUnit::Repository::Tar#repos/Perl6-Text--Table--Simple.tar.gz" perl6 -e "use Text::Table::Simple; say 'ok'"` 00:11
(e.g. short identifier version, and full class-name version) 00:12
and does `PERL6LIB="..." prove -e 'perl6' ...` even carry the PERL6LIB env var through to new processes? 00:14
thought it would have to be (export PERL6LIB="..." prove -e 'perl6' ...)
raschipi If you put the variable asignement in the same line in the shell, it's exported to the command being executed right after it. 00:21
If it's in a line of it's own, you'll need to export it to get it to affect multiple commands.
timotimo and if you're using fish, it forces you to put "env" in front of any such assignments that go before a command 00:22
raschipi Well, that means it doesn't have the feature at all. 00:24
env is a program that does it, external to fish. 00:25
colomon is there a standard idiom for “run to completion” for Procs spawned by run? 00:42
seems like $proc.out.slurp works, but that seems roundabout
raschipi The docs have 'say $p.out.slurp: :close;' 00:49
Geth doc: flussence++ created pull request #1361:
Small IO guide formatting fix
00:53
lookatme morning .o/ 01:00
ugexe so run '...'; 01:08
colomon ugexe: “so run” definitely doesn’t do it? 01:25
afk 01:31
Geth doc: 791f267502 | (Will "Coke" Coleda)++ | xt/code.pws
learn new code snippet
03:22
ugexe m: say now; say so run "perl6", "-e", "sleep 5"; say now 03:41
camelia Instant:1496720499.957286
run is disallowed in restricted setting
in sub restricted at src/RESTRICTED.setting line 1
in sub run at src/RESTRICTED.setting line 14
in block <unit> at <tmp> line 1
ugexe really just need to sink it 03:45
say now; run( "perl6", "-e", "sleep 5", :out ) andthen *.out.close; say now 03:47
evalable6 (exit code 1) Instant:1496720959.972139
run is disallowed in restricted setting
in sub restricted at src/RESTRICTED.setting line 1
in sub run at src/RESTRICTED.setting line 14
in block <unit> at /tmp/xLUoZS2u4V line 1
[Coke] .tell pmurias build for rakudo/js fails on OS X for me. 03:53
yoleaux [Coke]: I'll pass your message to pmurias.
[Coke] (ah, due to self-signed certs) 03:56
fatguy is there 'Carp' 'Croak' in perl 6 ? 04:11
zengargoyle_ there are Exceptions... 04:19
m: fail "oops"
camelia oops
in block <unit> at <tmp> line 1
zengargoyle_ i think they work a bit different than die/carp/croak but basically handle the same purpose. 04:20
fatguy look the same 05:06
fatguy how to set schema using DBlish ? 06:42
moritz fatguy: what do you mean by "set schema"? 07:14
lizmat colomon: could it be that the program you run is async? in other words, it returns immediately and keeps playing? 07:16
lizmat run() appears to wait until completion for me: 07:17
$ time perl6 -e 'run <sleep 10>'
real0m10.160s
lizmat clickbaits p6weekly.wordpress.com/2017/06/05/...illed-tap/ 07:18
tyil already read it
oh wait 07:19
its tuesday
lizmat: p6 meetup tonight in amsterdam?
lizmat yes, afaik
tyil eater: ^
lizmat we'll be going there
tyil u must cum
lizmat there's only the tiny matter of not having one with a key to TechInc at 6pm 07:20
tyil hmm
isnt there a p6 module to solve this
eater /f then 07:29
k 07:30
lizmat eater tyil looks like the key issue at TechInc tonight is fixed 07:41
tyil lizmat: yay :D 07:42
otherwise just apply TIMTOWTDI to the opening the door :'D
lizmat actually, it's 3 doors we need to get through :-)
fatguy moritz: www.postgresql.org/docs/current/st...hemas.html 07:43
moritz fatguy: I guess you could execte the "SET search_path ..." with a .do call 07:45
leont I'm trying to name a role Scalar, and rakudo is rather complaining about it 07:46
Is that supposed to be illegal?
HMmm, minimal test case doesn't bomb, let's see if I can find the trigger 07:48
fatguy moritz: ok, so there's no parameter to handle that 'set search_path' on .connect call ? 07:48
lizmat benchable6: help 07:52
benchable6 lizmat, Like this: benchable6: f583f22,HEAD my $a = ‘a’ x 2¹⁶; for ^1000 {my $b = $a.chop($_)} # See wiki for more examples: github.com/perl6/whateverable/wiki/Benchable
moritz fatguy: not that I'm aware of 07:53
lizmat benchable6: 2017.05,HEAD my @w = ^50 .map( { my $now = now; run <<perl6 -e "">>; ((now - $now) * 1000).Int }); say @w.sum/@w
benchable6 lizmat, starting to benchmark the 2 given commits
lizmat, benchmarked the given commits, now zooming in on performance differences
lizmat, ¦2017.05: ««run failed, exit code = 1, exit signal = 0»» ¦HEAD: ««run failed, exit code = 1, exit signal = 0»»
domm1 fatguy: you could do "alter database foo set search_path to bar,public", but that's probably not what you want
fatguy moritz: thanks ! 07:56
lizmat committable6: help
committable6 lizmat, Like this: committable6: f583f22,HEAD say ‘hello’; say ‘world’ # See wiki for more examples: github.com/perl6/whateverable/wiki/Committable
fatguy domm1: yes, i just want to change it on particular connection 07:57
lizmat m: my @w = ^50 .map( { my $now = now; run <<perl6 -e "">>; (now - $now) * 1000 }); say (@w.sum/@w).fmt("%.2f")
camelia run is disallowed in restricted setting
in sub restricted at src/RESTRICTED.setting line 1
in sub run at src/RESTRICTED.setting line 14
in block <unit> at <tmp> line 1
lizmat argh
leont evalable6: role Scalar {}; my $foo; 08:00
evalable6 (exit code 1) ===SORRY!===
You cannot create an instance of this type (Scalar)
leont That is a bug, right?
leont It shouldn't look up the Scalar container by name in the local namespace, that doesn't make sense 08:01
moritz that's not quite ironed out, I think 08:04
pmurias hi 09:06
yoleaux 03:53Z <[Coke]> pmurias: build for rakudo/js fails on OS X for me.
pmurias [Coke]: how does it fail? 09:07
tbrowder hi, #perl6! 10:13
two questions ref current state of IO: 10:14
tbrowder 1. how can i get the line number of a file handle, "$fh.ln"? i think i read that in Znet's final grant report but i don't see it in docs (need to search...) 10:16
tbrowder 2. i just saw that file handles don't automatically close when going out of scope, is that ever going to change? 10:19
nine tbrowder: 2. no. That's just an artifact of Perl 6 not using reference couting. 10:20
jnthn On 2 - no, because that relies on reference counting.
heh ;)
tbrowder ok, i need to change my habits! thanks 10:23
jnthn And resons not to reference count are 1) avoiding the circular reference problem, 2) it can become a huge source of contention in parallel programs, and 3) because it'd prevent Perl 6 from running on things like the JVM which are themsleves not reference counted.
nine OTOH we have LEAVe phasers 10:24
samcv tbrowder, if you use slurp then use slurp(:close) for example if slurping a file handle 10:33
if you do: my $cmd = run 'echo', 'hi', :in, :out; if you don't access .in or .out do you still need to close them? 10:34
jnthn samcv: Yes
samcv ok :)
i have not done that most times 10:35
jnthn Well, yes-ish in that Proc is about to be re-worked in terms of Proc::Async
tbrowder samcv: thanks. but why would slurp not auto close?
jnthn Which may well end up making it "not matter"
samcv tbrowder, that's how it works 10:35
idk
jnthn slurp does auto-close if you use the slurp($filename) or slurp($some-io-path)
samcv yeah 10:35
jnthn It's only .slurp on an already opened handle that does not
So if you
samcv that doesn't ever return a handle though
jnthn my $stuff = slurp('filename') you're totally fine
tbrowder ok, my use of slurp so far is safe. 10:36
jnthn It's only my $fh = open 'filename', :r; my $stuff = $fh.slurp; that would leak a handle if .close isn't called
tbrowder on the run output, my use says the out and err are strings, not file handles, so why do they need to be closed? lazy? 10:37
ignore my ? on run for the moment, got to check my veracity... 10:39
tbrowder ok, ref run: doesn't .slurp-rest close the file? 10:42
jnthn That'd need :close, although a plain .slurp works just as well as .slurp-rest these days, and .slurp(:close) isn't much longer than .slurp-rest 10:46
tbrowder i don't see slurp :close in docs... 10:50
tbrowder ref non-auto close on file handles needs a mention in "Traps..." 10:51
jnthn docs.perl6.org/routine/slurp#class...A%3AHandle 10:52
tbrowder oops, picked sub slurp! thanks. :close is not searchable 10:59
Zoffix tbrowder: we don't need to put everything in traps. It's not a trap. It's how the language works. The handle closure is mentioned in at least two places. 11:29
tbrowder: it's not lack of auto-close, buylt close on GC, not scope leave. And many routines offer :close argument 11:30
tbrowder: and .slurp-rest will be deprecated on 6.d. Use slurp
tbrowder: .err and .out on Proc are IO::Pipes. I've no idea how you get them to be stringa. 11:31
tbrowder Zoffix: ref yr last comment: i said ignore the question because i remembered i was working on the slurped file (pipe) 11:35
tbrowder Zoffix: any way to get line number on a file handle? 11:38
colomon lizmat: I don’t think so? certainly it doesn’t if you call it directly from the command line.
Zoffix tbrowder: no 11:40
tbrowder t'anks 11:41
Zoffix tbrowder: you can use lines.kv on data
and the index will be line number - 1
tbrowder ah, that's it: k is index, v is string, n'est ce pas? 11:42
Zoffix yes
tbrowder thanks (still looking for need to close file handle in docs...) 11:43
colomon wonders why he has never had problems with too many file handles open from “run”…
timotimo .o( the loneliness~ of the long distance runner~ ) 11:45
tbrowder ah, there it is in your new IO doc!!
araraloren ^_^ 11:46
raschipi colomon: You just never hit the limit, probably. 11:53
yoleaux 10:01Z <Zoffix> raschipi: no, I don't want chdir to do any magiks with '-' paths. IMO the fact that it .open treats it magically is unwanted in itself
timotimo the limit might also differ between distros 11:54
lizmat colomon: well, I don't have another explanation 11:57
raschipi Zoffix: Fair enough. I was just interested in what the plans were.
raschipi Debian has a recommended limit of 20 filehandles open at the same time for each user in a multi-user system. 12:00
So it can be very low. 12:01
vetmaster could you suggest some docs on working with extracted tokens/rules? 12:01
I saw one two days ago, but today I can't find it again.. 12:02
Geth doc: 285a45c77a | (Zoffix Znet)++ (committed using GitHub Web editor) | doc/Type/IO/Handle.pod6
Duplicate note about the need to close handle

in .open docs
12:08
doc: bc1d0e8266 | flussence++ (committed by Zoffix Znet) | doc/Language/io-guide.pod6
Add missing `=for code` on one paragraph (#1361)

On docs.perl6.org/language/io-guide this bit was rendering as plain body text. I decided against putting `=begin code`..`=end code` around the whole area in case someone else might want to add exposition in between later.
12:09
zengargoyle_ raschipi: is that 20 total or per user process? 12:20
raschipi Each user. 12:22
Enforced by pam_limits
zengargoyle_ that's pretty low, i don't think i've ever seen a limit set below 1024 in my life.
nine That's ridiculously low 12:23
zengargoyle_ is that diferent than `ulimit -n` or something?
raschipi It's just documented, not enforced by default.
It's what the users are allowed to set in their ulimit. 12:24
zengargoyle_ that's only like 6 processes with in/out/error
raschipi The example is for a multi-user system where aumini, faculty and staff have remote access, so it's extreme. 12:25
kurahaupo raschipi: per user or per user process? the latter seems more likely 12:29
Geth doc: 259d86899d | (Zoffix Znet)++ (committed using GitHub Web editor) | doc/Type/IO/Path.pod6
Fix example output; dogbert17++
raschipi limits.conf(5) 12:30
kurahaupo per-user limits that share across processes generally need to be enforced by a quota server; limits.conf sounds more like per process 12:31
ilmari according to the man page the limits are per-session (except maxlogin, which is system wide) 12:33
kurahaupo (and the limit is the number of filedescriptors, each of which may be shared between prices and with multiple fd numbers, so the controlling tty counts as only 1, even if it's used for stdin, stdout & stderr)
ilmari nproc wouldn't make much sense per-process
tbrowder ref using IO.lines.kv for file line number in k: any clever way to increment it before the block so first line is number 1 instead of 0?
kurahaupo processes*
20 open files per process was the typical limit in 1980's Unix systems 12:34
[Coke] tbrowder: at that point, I'd just have my own var. either way you're adding 1 to something every time through the loop. 12:35
[Coke] If someone's looking for a way to help out the docs with only knowing a little perl 6, github.com/perl6/doc/issues/1366 could use some work. Happy to answer any questions about individual code blocks that aren't currently compiling. 12:39
raschipi Reading the docs for pam_limits, it says these limits are for each user session, and the max number of sessions can also be configured. 12:40
Geth doc: 16e596268a | (Zoffix Znet)++ (committed using GitHub Web editor) | doc/Type/IO/Path.pod6
Fix .extension examples; dogbert17++
12:41
tbrowder [Coke] thanks, at least the kv method allows scoping thr line number var, a bit of cleanness. 12:43
pmurias [Coke]: any hints how rakudo.js is failing to build on your machine? ;) 12:46
[Coke] pmurias: noted immediately after; self-signed certs (when grabbing js modules to install) 12:47
so I can't install any (most?) of the JS you pull in, so boom.
tbrowder ah, Zoffix just showed a clever way to avoid an increment: "once next;" as the first expression in the block...trying it now... 12:48
[Coke] This is on $dayjob's laptop, so it's possible there's a security issue other users won't face.
rightfold Did a fun exercise :) glot.io/snippets/eqjxhomm0r
[Coke] tbrowder: then you lose your first line.
rightfold: I am glad you had fun, but that looks like brain hurty math. 12:50
(and I had an engineering degree with lots of math.) 12:51
rightfold For this you need to understand lambda calculus and elementary set theory.
tbrowder i would lose it anyway with an increment, and this should be more efficient
tbrowder for purists 12:52
i'm used to emacs alwas counting lines from 1 (and i think other gnu tool also) while most every thing else is indexed from zero 12:54
tbrowder yep, grep does the same with -n 12:56
Xiaoyafeng Hi! I 13:04
Hi!
pmurias [Coke]: what's your node.js/npm version? 13:05
Xiaoyafeng I have a question: how set lib directory in nativecall like gcc-L does? 13:06
daxim andrewalker, I don't know whether this counts as impolitely sticking my fingers into your pot; I want to request some db design constraints for your grant which I think will be useful and potentially save some extra work down the road: 13:08
1. comments need to be hierarchical and addressable, this way we can import the "use.perl.org" articles and comment archive without loss of fidelity.
2. user management needs to support merging identities, because on b.p.o article authors and commenters are already different identities and this is a favourable moment to clean up some mess.
if you agree, no need to edit the grant proposal, I think the constraints are compatible with the text as is.
Xiaoyafeng Oops..... 13:09
p6:say 3
. 13:10
andrewalker daxim: yes, I agree. It's really weird that b.p.o. authors and commenters are different identities, this should definitely be fixed. And 1. also makes sense, shouldn't be a problem.
daxim excellent 13:11
andrewalker daxim: thanks for the input :)
raschipi Xiaoyafeng: "-I path" adds the path to the module search path 13:14
raschipi For nativecall, you can use the full path. 13:17
Geth doc: 1463ef1272 | (Zoffix Znet)++ (committed using GitHub Web editor) | doc/Language/traps.pod6
List \qq[] as an easier alternative for avoid interpolation issues
13:32
zengargoyle_ at least way back when, if you had your own .so that wasn't in a regular place, and if it was one you built yourself and were going to install with a module... you put it under resources/lib/*.so 13:42
Geth doc: b6507d5bf8 | (Zoffix Znet)++ (committed using GitHub Web editor) | doc/Language/traps.pod6
Add IO::Path stringification to traps

  'cause it's unlikely people will end up reading IO::Path.Str docs,
and misused stringification isn't instantly apparent.
13:43
zengargoyle_ and then wrote a sub library to find it in %?RESOURCES and then used is native(&library). 13:44
Geth doc: 725cb4e056 | (Zoffix Znet)++ (committed using GitHub Web editor) | doc/Language/traps.pod6
reword; fix broken L<>
13:47
zengargoyle_ seems like it would be nice if is native checked the normal .so loading and then tried from %?RESOURCES{"lib/$libname"} automagically. 13:49
vetmaster I want to get all symbols except "/", "-" and "." literally 13:50
<-["/" | "-" | "."]>+
compiler says that's wrong
<-["/" | "-⏏" | "."]>+ 13:51
WAIDW?
araraloren m: say "ABC/as" ~~ m/<-["/" "-" "."]>+/;
camelia 5===SORRY!5=== Error while compiling <tmp>
Unsupported use of - as character range; in Perl 6 please use .. for range, for explicit - in character class, escape it or place it as the first or last thing
at <tmp>:1
------> 3say "ABC/as" ~~ m/<-…
araraloren m: say "ABC/as" ~~ m/<-[/\-\.]>+/;
camelia 「ABC」
araraloren quote is unnecessary 13:52
vetmaster ok
[Coke] pmurias: node v6.10.3, npm 3.10.10 13:55
travis-ci Doc build failed. Zoffix Znet 'Add IO::Path stringification to traps 14:04
travis-ci.org/perl6/doc/builds/239970312 github.com/perl6/doc/compare/1463e...507d5bf8fb
vetmaster how to match a token after a literally written string? 14:08
the string: " ~ "
vetmaster I try doing this: <" ~ "> <token> 14:09
moritz just " ~ " <token>
tbrowder another question: is there any safe way to "alias" a built-in sub or method so that one can have "default" settings such as :close on .spurt? subclass maybe? 14:12
araraloren wrap ? 14:13
m: sub f(:$close) { say $close; }; f; &f.wrap(sub (|c) { callwith(|c, :close); };); f; 14:15
camelia (Any)
Too many positionals passed; expected 2 arguments but got 3
in block <unit> at <tmp> line 1
araraloren m: sub f(:$close) { say $close; }; f; &f.wrap(sub (|c) { callwith(|c, :close); }); f;
camelia (Any)
True
araraloren tbrowder, ↑
tbrowder as in a sub? i think that would do it in lots of cases, but how about adverbs on containers?
tbrowder ah, wrap, more advanced usage to play with... 14:17
thanks, araraloren
araraloren em, tbrowder, also wrap maybe not lightweight 14:22
m: sub f(:$close) { say $close; }; my &z = -> |c { f(|c, :close); }; &z();
camelia True
travis-ci Doc build failed. Zoffix Znet 'reword; fix broken L<>' 14:22
travis-ci.org/perl6/doc/builds/239971719 github.com/perl6/doc/compare/b6507...5cb4e0568b
Zoffix I don't get why that ^ fails. The =end code is for the =begin code :/ 14:43
Geth doc: deeca520d9 | (Zoffix Znet)++ (committed using GitHub Web editor) | doc/Language/traps.pod6
Fix L«»
14:44
Zoffix Never mind
Zoffix tbrowder: you want .assuming docs.perl6.org/routine/assuming 14:46
Don't wrap core routines. It affects the entire program. perl6.party/post/Exploiting-Perl-6...ency-Chain
Geth doc: 82895bb2b3 | (Zoffix Znet)++ (committed using GitHub Web editor) | doc/Type/Callable.pod6
Include named params in .assuming docs
14:53
Geth doc: 6a870130f7 | (Zoffix Znet)++ (committed using GitHub Web editor) | doc/Type/Callable.pod6
Add examples of other Callables in .assuming docs
15:02
tbrowder Zoffix: that's it! and i assume you can assign the callable to a var? 15:03
tbrowder Thanks! 15:04
anyone working on a p6 linter? 15:05
Geth doc: d4391cf568 | (Zoffix Znet)++ (committed using GitHub Web editor) | doc/Type/Callable.pod6
Fix .assuming example

Not sure why I wrote half of it talking about .wrap >_<
15:08
tbrowder i'm starting my own simple one to catch my stupid mistakes, first two are mismatched pod =begin/=end pairs, second is unclosed open :w 15:09
perlpilot tbrowder: you using DrForr's Perl 6 parser? 15:10
tbrowder s/two are/one is/ 15:11
tbrowder no, i haven't tried it yet; would it catch those? 15:31
travis-ci Doc build passed. Zoffix Znet 'Include named params in .assuming docs' 15:36
travis-ci.org/perl6/doc/builds/239998632 github.com/perl6/doc/compare/deeca...895bb2b39d
Juerd How can I have a subtype of Array with a few extra methods, and then declare a @-sigiled variable? 15:40
travis-ci Doc build passed. Zoffix Znet 'Fix L«»' 15:47
travis-ci.org/perl6/doc/builds/239994371 github.com/perl6/doc/compare/725cb...eca520d9e9
araraloren Juerd, maybe augment : docs.perl6.org/syntax/augment 15:49
jnthn Argh, not augment :P
m: class MyArray is Array { method hi() { say "it's me!" } }; my @a is MyArray; say @a.hi 15:50
camelia it's me!
True
jnthn ah, two says
But anyways, like that :)
perlpilot Juerd: you can also mixin a role with your extra methods into an already declared @array. 15:51
Juerd Ah, "is". Thanks! 15:52
araraloren That's greater than augment! 15:53
Juerd Yeah, I'd rather not augment for such a specific use case :)
I need a stack of things, and it needs to be pretty-printed and checked for consistency. I like to use methods instead of functions for something like that.
raschipi Juerd: Write a Str(MyArray: --> Str) method in that derived class and you'll be able to interpolate it. 15:55
araraloren jnthn, Is there anyway to do what RAII does ? 15:56
Juerd raschipi: Oooh, very fancy!
raschipi: I've written Str's for my other classes but for some reason I didn't think of it for this one :) 15:57
araraloren jnthn, Or Perl6 will add some operator like `with` in python or C#
perlpilot araraloren: Perl 6 already has such things, they're just spelled different. :-) 15:59
jnthn I think adding something like Python's with or C#'s using would be the way to go for Perl 6
We already took with :)
rightfold In F# you write `use` instead of `let` 16:00
No body but just a variable declaration
araraloren perlpilot, do you mean DESTROY, but that's depend on GC. Actually it's not useful for RAII 16:01
jnthn, Oh, great!
jnthn using isn't bad 16:03
closing may work
rightfold One could imagine `use $x = f();` as sugar for `my $x = f(); LEAVE { $x.close(); }`.
jnthn But I tend to leave the naming bits of language design to others and worry about the semantics, where there's less bikeshedding ;) 16:04
perlpilot araraloren: I was thinking more about our various phasers, but yeah, that would be more verbose than python's `with`
travis-ci Doc build passed. Zoffix Znet 'Add examples of other Callables in .assuming docs' 16:05
travis-ci.org/perl6/doc/builds/240001971 github.com/perl6/doc/compare/82895...870130f72a
Juerd Is there a shortcut to get .^name without the package? 16:06
raschipi Juerd: Tell us what you really want. 16:08
Juerd Objects that stringify to the last part of their class name 16:09
perlpilot Juerd: like a Foo::Bar::Baz object would stringify to "Baz" ?
Juerd Yes
In my use case, Command::is-at that stringifies to is-at, or Command::help that stringifies to help
jnthn m: class Foo::Bar {}; say Foo.^shortname 16:10
camelia Foo
Juerd Almost :)
jnthn m: class Foo::Bar {}; say Bar.^shortname # even :)
camelia 5===SORRY!5=== Error while compiling <tmp>
Undeclared name:
Bar used at line 1. Did you mean 'Bag'?
jnthn grr!
m: class Foo::Bar {}; say Foo::Bar.^shortname # even :)
camelia Bar
jnthn There we go
Juerd Great, thanks :)
jnthn It really is time to go home for dinner :)
araraloren night . 16:14
\o.
travis-ci Doc build passed. Zoffix Znet 'Fix .assuming example 16:15
travis-ci.org/perl6/doc/builds/240004461 github.com/perl6/doc/compare/6a870...391cf56871
Juerd I don't understand why try { something that dies; CATCH { error handling } } dies after the error handling 16:26
I put in the CATCH hoping it would prevent the dieing :) 16:27
Skarsnik yeah it's weird
tbrowder um, Perl6::Parser fails using zef install Perl6::Parser, cant't find Perl::Parser::Factory
Juerd Is there a way of handling errors that in effect causes the rest of the try block to be skipped, as eval { ... } would do in Perl 5? 16:28
Skarsnik I think it was supposed to happen ? 16:29
Skarsnik the catch is not outside the try? 16:33
Juerd Should it be?
Skarsnik I do'nt remember ^^
raschipi Juerd: do you have a default in the CATCH block?
Juerd No 16:34
raschipi CATCH is a phaser, it will run when there's an exception and goes inside the block.
Skarsnik docs.perl6.org/language/exceptions...blocks-try
inside
raschipi So the CATCH won't catch anything.
Without 'when' or default, the exception is raised again. 16:36
Juerd m: ().tail.this-method-probably-doesn't-exist
camelia ( no output )
stmuk_
Juerd Is that not supposed to blow up?
stmuk_ l
oops 16:37
raschipi Juerd: That returns a failure, it will blow up if you try to use the value. 16:38
m: say so ().tail.this-method-probably-doesn't-exist 16:39
camelia False
Juerd m: my $x = ().tail.this-method-probably-doesn't-exist; say $x;
camelia (Any)
Juerd Doesn't look like a failure though
Zoffix Juerd: you're missing `default` {} block in your CATCH. Could that be the reason? 16:40
raschipi It's returning Nil, which is a failure. It will fail if you test for either truth or definedness.
Zoffix Nil isn't a Failure. it's a Nil
And calling non-existent method on Nil returns a Nil 16:41
raschipi Yeah, I'm realizing that now. Shouldn't it be a failure? Or just Nil?
Oh, Ok, Nil itself is special cased.
Zoffix Well, unless it's a Failure. Then calling a method on it explodes it 16:42
(Failure is Nil)
raschipi So, Juerd: it's Nil all the way down. 16:44
Zoffix And unless you hit the brokenedness...
m: Nil.contains: 42
camelia Invocant of method 'contains' must be an object instance of type 'Cool', not a type object of type 'Nil'. Did you forget a '.new'?
in block <unit> at <tmp> line 1
raschipi ().tail returns Nil, so you can call any method on it and it will just return Nil. 16:45
Zoffix tbrowder: that's because its META file is missing most of the files the distro provides. Clone it. fix the meta file `provides` key to list all the files, then run zef install . and send a PR to DrForr_++ to fix the issue 16:47
Zoffix m: {{{ die; CATCH { .^name.say } }; CATCH { "oh hello".say } }; CATCH { default { .^name.say } } }; CATCH { 'meows'.say } 16:54
camelia X::AdHoc
oh hello
X::AdHoc
Zoffix TIL
raschipi m: {{{ die; CATCH { .^name.say } }; CATCH { "oh hello".say } }; }; CATCH { 'meows'.say } 16:56
camelia X::AdHoc
oh hello
meows
Died
in block at <tmp> line 1
in block <unit> at <tmp> line 1
raschipi m: {{{ die; CATCH { .^name.say } }; CATCH { "oh hello".say } }; }; CATCH { default {'meows'.say} }
camelia X::AdHoc
oh hello
meows
raschipi m: {die 'croak'; }; CATCH { default { .payload.say} } 16:58
camelia croak
raschipi A CATCH block outside the block will catch the exception because it's raised again when nothing inside the block deals with it. 17:00
Juerd Re default { }: I left the default out because I had only one generic error handler. 17:10
Juerd I find it aesthetically unpleasing to have CATCH { default { ... } }, but apparently I have little choice 17:11
raschipi That's exactly what default is for
Juerd Right - I thought it'd be like given/when, where default can be left out.
raschipi If you wanted to get an specific type of exception, you would use CATCH{ when X::Specific { ...} }
Juerd Nope, I just want to print an error message and abort a current transaction. 17:12
This program may not die.
Adding default { }, although it doesn't look very elegant, solves the issue :)
raschipi Throw an specific type of Exception and catch just that. 17:13
docs.perl6.org/type/Exception --> creating your own exceptions is easy. 17:14
class X::YourApp::SomeError is Exception {method message() {"A YourApp-Specific error occurred: out of coffee!";}} 17:15
raschipi If any other type of exception ends up raised, note or log it at least, to aid debugging 17:17
Besides reverting the transaction.
Juerd raschipi: Normally I would do that, but it doesn't fit this use case very well.
A generic approach works well here, and saves me lots of code. 17:18
raschipi Don't forget to log what happened, at least.
Juerd raschipi: Not even relevant in this case. It's an interactive thing, and the operator has to deal with any fallout anyway, and after that, it will never again matter... 17:20
raschipi You know things can be resumed from the poin t where they were raised, right? 17:21
andrei my @a = <aa bb cc> ; for @a ( -> $x { $x.say } )
why that above does not work?
raschipi andrei: It's expecting a block after the 'for @a', but it finds '(' 17:22
andrei I am a beginner, sorry. I thought parenthesis are just for grouping 17:23
andrei The block is -> $x { $x.say } 17:23
raschipi They can group where P6 expects a group
m: my @a = <aa bb cc> ; for @a -> $x { $x.say }
camelia aa
bb
cc
andrei This is misterious...
raschipi Do you know any other programming language? 17:24
andrei Yes, some Python 17:24
andrei and some Haskell 17:25
In Haskell, parehtesis are just for precedence... I guess P6 is more like Python than Haskell !
Where should I read about the use of parenthesis in P6 ? 17:26
raschipi The message it gives is very clear in my opinion: for @a⏏ ( -> $x { $x.say } ) expecting any of: block or pointy block; infix; infix stopper
andrei Thank you. But I want to know, exactly under which circumstances I can use ( ... ) parenthesis? 17:27
hahainternet Rust doesn't support variable₁ … useless
andrei my @a = <aa bb cc> ; for @a { -> $x { $x.say } } 17:29
returns Nil , why ? I would think
that the value of the block would be the anonymous function -> $x { $x.say }
so, naively it would be the same as just my @a = <aa bb cc> ; for @a -> $x { $x.say } 17:30
raschipi m: my @a = <aa bb cc> ; my $b = do for @a { -> $x { $x.say } }; say $b.^name
camelia List
raschipi Returns a List of 3 subroutines 17:31
m: my @a = <aa bb cc> ; my $b = do for @a { -> $x { $x.say } }; say $b
camelia (-> $x { #`(Block|59054240) ... } -> $x { #`(Block|59054312) ... } -> $x { #`(Block|59054384) ... })
raschipi m: my @a = <aa bb cc> ; my $b = do for @a { -> $x { $x.say } }; say $b[0]() 17:32
camelia Too few positionals passed; expected 1 argument but got 0
in block <unit> at <tmp> line 1
raschipi m: my @a = <aa bb cc> ; my $b = do for @a { -> $x { $x.say } }; say $b[0]('j')
camelia j
True
raschipi So, the value of the block is an anonymous function, and it executes 3 times, a 17:33
and returns 3 anonymous functions 17:34
andrei Yes, thanks, this makes sense
raschipi Parethesis can go in 2 places: after a name, they mean 'call a function' 17:34
m: my $a = { $^x ** 2}; $a(2) 17:35
camelia ( no output )
raschipi m: my $a = { $^x ** 2}; say $a(2)
camelia 4
andrei Yes ! And second place ? 17:36
raschipi They change what in an expression is executed first.
andrei i.e. precedence? 17:37
raschipi If you put a space after the name, they change from the first meaning to the other.
Yes, they change precedence.
andrei Nice, I see
But, what exactly happens when I say: for @a -> $x { $x.say } ?
raschipi m: my $a = { $^x ** $^y }; say $a(2,3); say $a (2,3) 17:38
camelia 5===SORRY!5=== Error while compiling <tmp>
Two terms in a row
at <tmp>:1
------> 3$a = { $^x ** $^y }; say $a(2,3); say $a7⏏5 (2,3)
expecting any of:
infix
infix stopper
postfix
statement end…
andrei Is this just idiomatic? Can I split this into separate groups, to understand the logic?
nine andrei: @a.map: -> $x { $x.say }; is what happens
raschipi Perl6 expects the keyword (for), then an expression, then a block 17:39
( is part of expressions, so it finds the keyword, an expression (@a), and then another expression starts. 17:40
Which is not what it expects.
If it finds the '{' or '-->', that's the start of a block, so it's happy. 17:42
This is because they want to avoid "backtracking" as much as possible
andrei By the way, this works fine: my @a = <aa bb cc> ; for (@a) -> $x { $x.say }
No problem surrounding @a with ()
raschipi So it has to know what follows is a block before even looking inside. 17:43
raschipi Like I said, () are part of expressions, so no problem putting them where expressions are next. But can't put them where blocks are expected. 17:44
raschipi Taking away the spca between the 'for' and the ( changes it's meaning from the second case to first. 17:44
space* 17:45
andrei Yes, that I understand
andrei However, I dont understand how come -> $x { $x.say } is not just an expression ? This is just lambda, right, anonymous function? 17:46
Anonymous function is not an expression ?
raschipi The practical answer is that requiring that it be this way makes parsing Perl6 easier/faster
TimToady it's a lambda, yes, but it's the only place where Perl 6 allows two terms in a row 17:46
so it must be parsed specially 17:47
andrei what does it mean " two terms in a row " ?
TimToady m: 42 43
camelia 5===SORRY!5=== Error while compiling <tmp>
Two terms in a row
at <tmp>:1
------> 03427⏏5 43
expecting any of:
infix
infix stopper
statement end
statement modifier
statement modifier …
raschipi In an expression, things are either terms or operators.
TimToady most of the time, we require an infix of some sort between any two terms 17:48
andrei Ahh, I see...
TimToady has to do with the concept of self-clocking code
knowing whether we expect a term or an infix allows us to separate those namespaces
TimToady otherwise we could never distinguish /foo/ from division 17:49
that's true even in Perl 5
andrei So, you mean , $x and { $x.say } are two terms, right?
TimToady yes, so we specially allow the first expression to be terminated by { or ->
TimToady so you can't just poke any old expression into the second slot 17:50
raschipi Why 'for TERM BLOCK' and not 'for TERM, BLOCK'?
andrei Yes, why indeed?
TimToady it's ugly 17:51
raschipi Everyone would mio
TimToady and there's always map if you need it
raschipi *mock Perl6 for ugly systax
andrei So, after the "for" keyword is the only place where P6 allows two terms in a row ? 17:53
TimToady it would also become impossible to parse for 1, 2, 3, ->{}, 5, 6
well, it would parse, but it wouldn't make semantic sense
whereas with the current syntax, we know the block is special with a glance, and don't have to figure out whether it's just a term in the list 17:55
we reuse this idea for many kinds of block-oriented syntax, so it's not just a special feature of "for"
TimToady so not just "for", but "given", "with", "if", "CATCH", and so on 17:56
andrei I see. Thanks a lot, I think this cleared my confusion. 17:57
TimToady m: with %*ENV<HOME> { .say }
camelia /home/camelia
TimToady same thing
m: with %*ENV<HOME> -> $foo { $foo.say } 17:58
camelia /home/camelia
TimToady that's how P6 is designed: we don't mind special syntax, but when we put in special syntax, we try to use it lots of places so that it justifies its mental load 17:59
andrei have to run now unfortunately, thank you guys 18:00
TimToady you also see this in places like re-using weird pair syntax all over
TimToady ciao 18:00
vetmaster how to split file content by newlines efficiently? 18:39
*contens
**contents
moritz .lines 18:41
vetmaster why that does not work : <pos> % [', '*] 19:02
m: grammar A { rule TOP { <pos> % [', '*] } rule pos { \w+ } }; 19:03
camelia 5===SORRY!5=== Error while compiling <tmp>
Missing quantifier on the left argument of %
at <tmp>:1
------> 3grammar A { rule TOP { <pos> %7⏏5 [', '*] } rule pos { \w+ } };
vetmaster ?
camelia says "missing quantifier on the left argument" 19:04
moritz the % is a modifier to a quantifier
so you first need a quantifier
<pos>* % ', ' maybe?
vetmaster ah yes 19:05
it should be equal to <pos> ', ' <pos> ', ' ...
<pos>*, of course
moritz m: say so "a, bc, d" ~~ / ^ [\w+]* % ', ' $ / 19:11
camelia True
geekosaur % changes * from "any number of the preceding token" to "any number of the preceding token, each separated by the following token"
rightfold m: my @xs = 1, 2; my @ys = @xs, 3; @ys.perl.say
camelia [[1, 2], 3]
vetmaster m: my @xs = 1, 2; my @ys = @xs, 3; say @ys; 19:15
camelia [[1 2] 3]
vetmaster m: say A x 20;
camelia 5===SORRY!5=== Error while compiling <tmp>
Undeclared name:
A used at line 1
Undeclared routine:
x used at line 1
vetmaster m: say 'A' x 20
camelia AAAAAAAAAAAAAAAAAAAA
vetmaster m: say 'A' xx 20
camelia (A A A A A A A A A A A A A A A A A A A A)
vetmaster m: say 'A' xxx 20 19:16
camelia 5===SORRY!5=== Error while compiling <tmp>
Two terms in a row
at <tmp>:1
------> 3say 'A'7⏏5 xxx 20
expecting any of:
infix
infix stopper
postfix
statement end
statement modifier
vetmaster m: say "abc\ndef\nabc\ndef"
camelia abc
def
abc
def
vetmaster m: say "abc\ndef\nabc\ndef".lines
camelia (abc def abc def)
vetmaster m: say "abc\ndef\nabc\n\n\n\def".lines 19:17
camelia 5===SORRY!5=== Error while compiling <tmp>
Unrecognized backslash sequence: '\d'
at <tmp>:1
------> 3say "abc\ndef\nabc\n\n\n\7⏏5def".lines
expecting any of:
argument list
double quotes
term
vetmaster m: say "abc\ndef\nabc\n\n\n\ndef".lines
camelia (abc def abc def)
geekosaur m: dd "abc\ndef\nabc\n\n\n\ndef".lines 19:20
camelia ("abc", "def", "abc", "", "", "", "def").Seq
moritz m: say ' ' ~~ /<sp>/ 19:28
camelia No such method 'sp' for invocant of type 'Match'. Did you mean 'so'?
in block <unit> at <tmp> line 1
vetmaster m: grammar A { rule TOP { <latin>* } token latin {\w+} }; say A.parse('word'); 19:29
camelia 5===SORRY!5=== Error while compiling <tmp>
Strange text after block (missing semicolon or comma?)
at <tmp>:1
------> 3grammar A { rule TOP { <latin>* }7⏏5 token latin {\w+} }; say A.parse('word'
expecting any of:
infix
vetmaster m: grammar A { rule TOP { <latin>* }; token latin {\w+} }; say A.parse('word');
camelia 「word」
latin => 「word」
vetmaster m: grammar A { rule TOP { <latin>* }; token latin {\w+} }; say A.parse('word /test/');
camelia Nil
vetmaster Why A matches 'word' in the first case, but don't match one in the second case? 19:30
vetmaster * doesn't 19:30
Geth specs: 9c2105171e | (Moritz Lenz)++ | S05-regex.pod
Remove <sp> as an alias for \s

Nobody has bothered implementing it even though it would have been trivial. There are no tests for it either.
This means the community has not accepted it, so we can stop pretending :-)
19:31
geekosaur vetmaster, it doesn't return a partial match if the whole expression fails. and if you use parse, you are asserting the grammar matches the entire input string 19:32
so TOP matches 'word' and then fails because what follows doesn't match, and that fails the whole grammart
vetmaster m: grammar A { rule TOP {"/" \w+ "/"}; }; A.parse('/test/') 19:46
camelia ( no output )
vetmaster m: grammar A { rule TOP {"/" \w+ "/"}; }; say A.parse('/test/');
camelia 「/test/」
perlpilot m: grammar A { rule TOP { <latin>* }; token latin {\w+} }; say A.subparse('word /test/'); 19:48
camelia 「word 」
latin => 「word」
perlpilot vetmaster: maybe you wantted subparse instead?
(caveat lector, I've only been paying attention here about 5 seconds :) 19:49
vetmaster m: my $test_str = "абыл кай \/об. Ч\/"; 20:05
camelia ( no output )
vetmaster m: my $test_str = "абыл кай /об. Ч/"; 20:06
camelia ( no output )
vetmaster works good
"абыл кай /об. Ч/" ~~ /^<-[\/]>+/;
m: "абыл кай /об. Ч/" ~~ /^<-[\/]>+/;
camelia ( no output )
tbrowder [Coke]: you're right, the ' 20:08
the "once next" trick does appear to start index from one but it also skips the first value, so it's not useful. this does what i need wiith min fuss: "for ... lines.kv -> $i is copy, $line is copy { ++$i; # do stuff to the line}" 20:13
[Coke] tbrowder++ 20:14
perlpilot tbrowder: Zoffix's "once next" trick included an empty element as the first element in the list too. for "", lines.kv -> $i, $line { once next; ... } 20:18
vetmaster m: grammar A { rule TOP {<latin>+ % [" ~ "*]}; token latin { \w+ }; }; A.parse('test');
camelia ( no output )
vetmaster m: grammar A { rule TOP {<latin>+ % [" ~ "*]}; token latin { \w+ }; }; say A.parse('test');
camelia 「test」
latin => 「test」
vetmaster m: grammar A { rule TOP {<latin>+ % [" ~ "*]}; token latin { \w+ }; }; say A.parse('test ~ another'); 20:19
camelia 「test ~ another」
latin => 「test」
latin => 「another」
vetmaster m: grammar A { rule TOP {<latin>+ % [" ~ "*]}; token latin { \w+ }; }; say A.parse('test ~ another test');
camelia Nil
vetmaster m: grammar A { rule TOP {<latin>+ % [" ~ "*]}; token latin { <-[~]>+ }; }; say A.parse('test ~ another test');
camelia Nil
vetmaster m: grammar A { rule TOP {<latin>+ % ["~ "*]}; token latin { <-[~]>+ }; }; say A.parse('test ~ another test'); 20:20
camelia 「test ~ another test」
latin => 「test 」
latin => 「another test」
vetmaster m: grammar A { rule TOP {<latin>+ % ["~ "*]}; token latin { <-[~]>+ }; }; say A.parse('testing grammar ~ another test'); 20:21
camelia 「testing grammar ~ another test」
latin => 「testing grammar 」
latin => 「another test」
perlpilot tbrowder: er ... for ("", |lines()).kv # it would work better if I used all the right syntax :)
vetmaster m: grammar A { rule TOP {<latin>+ % ["~ "*]}; token latin { <-[/~]>+ }; }; say A.parse('testing grammar ~ another test'); 20:22
camelia 「testing grammar ~ another test」
latin => 「testing grammar 」
latin => 「another test」
vetmaster m: grammar A { rule TOP {<latin>+ % ["~ "*]}; token latin { <-[/~]>+ }; }; say A.parse('testing grammar ~ another test /abc/');
camelia Nil
vetmaster m: grammar A { rule TOP {<latin>+ % ["~ "*] .*}; token latin { <-[/~]>+ }; }; say A.parse('testing grammar ~ another test /abc/');
camelia 「testing grammar ~ another test /abc/」
latin => 「testing grammar 」
latin => 「another test 」
tbrowder ok, i missed that, looks like that does work, but noiser to me than the simple increment. thanks all. 20:23
perlpilot tbrowder: yeah, it's "clever" and that's usually a sign you shouldn't use it :) 20:24
tbrowder yeah, i'm just a simple man and i have to read my code much later when I've forgotten the glamorous stuff 20:25
timotimo m: sub keyshift($kv, $n) { ($kv.key + $n) => $kv.value }; for <a b c d e f g>.kv>>.keyshift(1) -> $k, $v { say "$k: $v" } 20:26
camelia No such method 'keyshift' for invocant of type 'Int'
in block <unit> at <tmp> line 1
timotimo m: sub keyshift($kv, $n) { ($kv.key + $n) => $kv.value }; for <a b c d e f g>.kv>>.&keyshift(1) -> $k, $v { say "$k: $v" }
camelia No such method 'key' for invocant of type 'Int'. Did you mean 'keys'?
in sub keyshift at <tmp> line 1
in block <unit> at <tmp> line 1
timotimo oh, of course, not a pair
ugexe m: my $line = "a\nb\nc\nd"; for $line.lines.kv -> $i, $l { once redo; say $i } # seems weird
camelia 0
b
c
Too few positionals passed; expected 2 arguments but got 1
in block <unit> at <tmp> line 1
timotimo m: sub keyshift($kv, $n) { ($kv[0] + $n), $kv[1] }; for <a b c d e f g>.kv>>.&keyshift(1) -> $k, $v { say "$k: $v" }
camelia Cannot convert string to number: base-10 number must begin with valid digits or '.' in '3⏏5a' (indicated by ⏏)
in sub keyshift at <tmp> line 1
in block <unit> at <tmp> line 1

Actually thrown at:
in sub keyshift at <tmp> line 1
timotimo ah, hyper descends into pieces
m: sub keyshift($kv, $n) is nodal { ($kv[0] + $n), $kv[1] }; for <a b c d e f g>.kv>>.&keyshift(1) -> $k, $v { say "$k: $v" } 20:27
camelia Cannot convert string to number: base-10 number must begin with valid digits or '.' in '3⏏5a' (indicated by ⏏)
in sub keyshift at <tmp> line 1
in block <unit> at <tmp> line 1

Actually thrown at:
in sub keyshift at <tmp> line 1
timotimo hmm.
m: sub keyshifter($n) { sub shifter($kv) { ($kv[0] + $n), $kv[1] } }; for <a b c d e f g>.kv.map(keyshifter(1)) -> $k, $v { say "$k: $v" }
camelia Cannot convert string to number: base-10 number must begin with valid digits or '.' in '3⏏5a' (indicated by ⏏)
in sub shifter at <tmp> line 1
in block <unit> at <tmp> line 1

Actually thrown at:
in sub shifter at <tmp> line 1
i…
timotimo takes it to the local shell 20:28
would have been much easier with .pairs
timotimo ah, i didn't realize .kv is already flat 20:29
well, that makes a lot of sense
timotimo m: sub keyshifter($n) { sub shifter($a, $b) { slip($a + $n, $b) } }; for <a b c d e f g>.kv.map(keyshifter(1)) -> $k, $v { say "$k: $v" } 20:30
camelia 1: a
2: b
3: c
4: d
5: e
6: f
7: g
raschipi .kv returns a zip between the line numbers and the values. Asigning it to a hash will pair them up. 20:31
timotimo of course
this is explicitly about iterating over a .kv and wanting to have it start at 1 rather than 0
at least that's how i interpreted the situation
raschipi Why not zip it with a 1..* range explicitly instead of calling .kv? 20:35
timotimo because then you'd have to call some operator (like a +) on the value as well
and that won't work very well for anything from strings to random objects
oh
timotimo you mean it totally differently from how i understood it 20:35
raschipi say (<a b c d e f g> Z 1..*) 20:36
evalable6 ((a 1) (b 2) (c 3) (d 4) (e 5) (f 6) (g 7))
raschipi m: ( 1..* Z <a b c d e f g>).map: -> $k , $v { say "$k: $v" } 20:39
camelia 1 a: 2 b
3 c: 4 d
5 e: 6 f
Too few positionals passed; expected 2 arguments but got 1
in block <unit> at <tmp> line 1
raschipi m: ( 1..* Z, <a b c d e f g>).map: -> $k , $v { say "$k: $v" } 20:39
camelia 1 a: 2 b
3 c: 4 d
5 e: 6 f
Too few positionals passed; expected 2 arguments but got 1
in block <unit> at <tmp> line 1
perlpilot m: for 1..* Z <a b c d e f g> -> ($k, $v) { say "$k: $v" } 20:40
camelia 1: a
2: b
3: c
4: d
5: e
6: f
7: g
perlpilot (since that's what you really wanted :)
the minute vagaries of syntax may still trip people up though
raschipi The only way to avoid that is to not write Perl6. 20:42
perlpilot raschipi++
with the zip trick, you can pick your starting index too ... 20:45
m: for -5..* Z <a b c d e f g> -> ($k, $v) { say "$k: $v" }
camelia -5: a
-4: b
-3: c
-2: d
-1: e
0: f
1: g
perlpilot which is useful for the same reason languages like pascal (and its progeny) and early Perl 5 allowed it (to make some algorithms simpler) 20:46
raschipi m: for 'a'...'z' Z <a5 b4 c3 d2 e1 f0 g5> -> ($k, $v) { say "$k: $v" } 20:47
camelia 5===SORRY!5=== Error while compiling <tmp>
Only identical operators may be list associative; since '...' and 'Z' differ, they are non-associative and you need to clarify with parentheses
at <tmp>:1
------> 3for 'a'...'z' Z7⏏5 <a5 b4 c3 d2 …
raschipi m: for ('a'...'z') Z <a5 b4 c3 d2 e1 f0 g5> -> ($k, $v) { say "$k: $v" } 20:48
camelia a: a5
b: b4
c: c3
d: d2
e: e1
f: f0
g: g5
timotimo m: for <a b c d e f g> Z[R,] 1..* -> $k, $v { say "$k: $v" } 20:59
camelia 1 a: 2 b
3 c: 4 d
5 e: 6 f
Too few positionals passed; expected 2 arguments but got 1
in block <unit> at <tmp> line 1
timotimo heh. whoops :)
m: for flat <a b c d e f g> Z[R,] 1..* -> $k, $v { say "$k: $v" }
camelia 1: a
2: b
3: c
4: d
5: e
6: f
7: g
Geth doc: 81c2d2394d | (Zoffix Znet)++ (committed using GitHub Web editor) | doc/Language/5to6-perlvar.pod6
Use better idiom than .kv for numering lines; raschipi++
21:27
doc: 2b130cf5f6 | (Zoffix Znet)++ (committed using GitHub Web editor) | doc/Type/IO/Handle.pod6
Reformat signature of IO::Handle.open

So it fits on screen
21:31
tbrowder .tell DrForr_ you have a new PR for Perl6::Parser 21:42
yoleaux tbrowder: I'll pass your message to DrForr_.
Geth doc: dce339cc23 | (Zoffix Znet)++ (committed using GitHub Web editor) | doc/Language/traps.pod6
Remove trailing ws; Fixes #1367
22:24
Geth doc: 804dce6400 | (Kris Shannon)++ (committed using GitHub Web editor) | doc/Language/io-guide.pod6
Small grammar and syntax changes
22:31
doc: 7fdfdb5e03 | (Zoffix Znet)++ (committed using GitHub Web editor) | doc/Language/glossary.pod6
Fix typo; Fixes #1363
Geth doc: 1a5ee4fd39 | (Zoffix Znet)++ (committed using GitHub Web editor) | doc/Language/io-guide.pod6
Fix minor factual info; Fixes #1362
22:39
eveo .tell jnthn would you be able to resolve this ticket? The question is is it guaranteed `run` will never use the shell to execute stuff. github.com/perl6/doc/issues/1208#i...-281522376 22:47
yoleaux eveo: I'll pass your message to jnthn.
rightfold m: class C { has $.x! }; C.new(x => 1); C.new() 23:14
camelia 5===SORRY!5=== Error while compiling <tmp>
Negation metaoperator not followed by valid infix
at <tmp>:1
------> 3class C { has $.x!7⏏5 }; C.new(x => 1); C.new()
expecting any of:
constraint
infix
infix …
rightfold m: class C { has $.x is required }; C.new(x => 1); C.new()
camelia The attribute '$!x' is required, but you did not provide a value for it.
in block <unit> at <tmp> line 1
rightfold Ok nice