»ö« Welcome to Perl 6! | perl6.org/ | evalbot usage: 'p6: say 3;' or /msg camelia p6: ... | irclog: irc.perl6.org or colabti.org/irclogger/irclogger_log/perl6 | UTF-8 is our friend! 🦋
Set by Zoffix on 25 July 2018.
irced so i'm reading a book on perl and it says to try 0.1 + 0.2 in my favorite language 03:12
is there something in my favorite language i should be seeing besides 0.3?
put 0.1 + 0.2
evalable6 0.3
timotimo irced: subtract 0.3 from it and see what it gives 03:13
from the result, that is
irced ok!
irced smiles.
MasterDuke irced: in most languages you won't get exactly 0.3 because of the limitations of floating point representation
irced std::cout << std::fixed << std::setprecision(50) << c << "\n"; in c++ and printf("%.50f\n", c); gave 0.00000000000000005551115123125782702118158340454102 03:18
so, how to i get the same precision from my perl6 code ? 03:19
buEuler, buEuler 03:20
MasterDuke irced: well, in perl6 it is exactly 0.3. do you want to print more zeroes after the 3? 03:21
irced yep 03:22
irced folds his arms.
MasterDuke m: printf("%.50f\n", 0.3) 03:23
camelia 0.30000000000000000000000000000000000000000000000000
irced claps.
camelia does c, apparently.
irced holds camelia in higher esteem.
irced thanks MasterDuke heartily.
MasterDuke np, but it's more like perl6 does printf pretty similarly to c 03:24
irced m: my $a=0.1; my $b=0.2; my $c=a+b; printf("%.50f\n", c);
camelia 5===SORRY!5=== Error while compiling <tmp>
Undeclared routines:
a used at line 1
b used at line 1
c used at line 1
irced indubitably!
irced scratches his head. 03:24
irced m: my $a=0.1; 03:25
camelia ( no output )
MasterDuke m: my $a=0.1; my $b=0.2; my $c=$a+$b; printf("%.50f\n", $c);
camelia 0.30000000000000000000000000000000000000000000000000
irced doh!
thanks.
that's $$$
irced converses with himself appreciably. 03:26
irced :m put Inf 03:32
hah, stumped you camelia!
camelia?
irced looks into the blank stare of camelia's eyes. 03:33
:m put 3.14*10**30.^name 03:35
irced :m put 3.14.^name 03:35
:m put 3.14.^name;
:m say 3.14.^name;
irced oh yeah, she's gone. 03:35
MasterDuke irced: m:, not :m
irced m: put Inf 03:36
camelia Inf
irced whoa, time for break
irced takes a break.
MasterDuke m: say "ab" ~~ /a<at(1)>/; say "ab" ~~ /a<at(2)>/ 03:40
camelia 「a」
at => 「」
Nil
MasterDuke anyone know what that ^^^ is called? 03:41
i.e., the <at(1)> syntax/regex capability 03:42
b2gills m:put 0.1e0 + 0.2e0 03:49
evalable6 0.30000000000000004
b2gills m: put (0.1 + 0.2).nude.join('/') 03:50
camelia 3/10
irced gasps. 05:02
m: put 0.1e0 + 0.2e0
camelia 0.30000000000000004
irced m: put 0.3e0 -0.2e0
camelia 0.09999999999999998
irced m: put 0.3e0
camelia 0.3
irced sacre blue!
irced sacre bleu! 05:03
irced sacré bleu! 05:03
irced pats b2gills forcefully on the back over a steep and perilous precipice. 05:04
irced watches b2gills plummet to a stalactitic and bloody end. 05:06
sno In case someone has an answer; stackoverflow.com/questions/545289...ve-integer 06:38
Geth doc: 81de538149 | (JJ Merelo)++ | 2 files
Restructure and reflow refs #2483
06:43
jmerelo sno: the problem is the width of the native integer, not the natural integer 06:45
sno: Ints have arbitrary precision
sno: my money is on array subscripts using nativeints. 06:52
sno jmerelo: since there are results larger than 2^64 (which is finally the largest size of native ints on that platform), there is more involved than native ints ... 06:54
jmerelo: please treat me as someone who has no clue about Perl6 opportunities and just copied the code from Rosettacode and playing with it
jmerelo sno: I've answered already. The "native int" error you get is because array subscripts use native ints. You might have to solve the problem by creating your own array, or trying to avoid using array subscripts. Cached function calls might be a good option 06:56
sno jmerelo: I'm sorry - I don't understand 06:58
jmerelo sno: you are using @[m][n] as state. [] call AT-POS in Array, but use "int" (native int) as argument. When you turn the Int m into int in @[][], you get the error. 06:59
sno: when I say "you", I mean the program, of course. I'm just trying to explain the error in the program. 07:01
sno jmerelo: I copied code from Rosettacode and played with it ;)
Any fineness in that code isn't from me ... and when I remove line 3 I get an error which seems not related to @[m][n]
jmerelo sno: I know, I'm using "you" generically. I'm just trying to explain the error. When you remove line you lose the cache, so the error is different. In that case it's likely that you hit the limit of the "unlimited" precision 07:02
jmerelo sno: Again, my money is on some of the operations having a precision that's not so unlimited, maybe ** 07:02
sno jmerelo: that's a more helpful answer - but since that's an example where Perl6 is trying to show it's abilities to the world, I'd like to get a "I'm sure" answer and maybe a task for fixing that ;) 07:03
jmerelo sno: checking the source now... 07:04
sno: Int ** Int yields Real. The code is coercing it Back to Int. 07:07
jmerelo finds movie titles in what I have said: Back to Int. 07:08
sno jmerelo: so the (2 ** n - 1) causes the issue
jmerelo sno: right. it hits this error: github.com/rakudo/rakudo/blob/mast...#L391-L401 07:10
jmerelo sno: the result is too big, it becomes "Num", it raises the error. 07:10
jmerelo sno: I'd have to go into NQP to see exactly when that happens, and that's somewhere I wouldn't want to go... 07:11
sno jmerelo: maybe someone else could do ;) 07:12
At least, that's a very good answer what wents wrong ...
jmerelo sno: I don't know if it's worth the while, anyway. It's quite clear that Int has any precision as long as it's not involved in some operations like ** 07:20
sno jmerelo: I didn't expect the type change -> Real when doing Int ** Int 07:25
jmerelo sno: What I don't understand is why it throws when it's actually a Num that's returned. It should simply return it as Real. 07:27
.tell cfa I run the profiler, it's not very helpful. It's allocating lots of array, and using 20% of the time garbage-collection. But arrays have lexical scope, so I don't get what's the matter. 07:28
yoleaux jmerelo: I'll pass your message to cfa.
sno how do I create a n list of the same element? In perl5 it was (s) x $n 07:30
docs.perl6.org/type/Array doesn't say anything about that, neither perl6intro.com/#_arrays 07:31
jmerelo sno almost the same 07:32
(s) xx $n
m: say "foo" xx 33
camelia (foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo foo)
sno thanks 07:36
Geth doc: 13ca3ad749 | cfa++ | doc/Language/create-cli.pod6
=item2 → =head2
07:50
synopsebot Link: doc.perl6.org/language/create-cli
crella Hi, I am a newbie from East Asia 07:52
p6 -e "say 3;" -> 3\n
My English is not good. 07:53
moritz hi crella, welcome to #perl6 07:56
m: say 3
camelia 3
crella rakudo start 2018.10 implementing perl 6.c 07:59
crella Will perl6 next version improve much performance ? 08:01
moritz crella: there's a steady improvement in performance over most releases 08:02
crella I used debian 8 for some time during my university life, but my current job needs much work in MSOffice/WPS. I hate the complicated grammar and NO LINE FEED in excel functions, and free WPS doesn't provide VBA, so I am working to use perl6 to help me deal with the reports. 08:05
=IF(A2=0,0,IF(A2<=10,10*K2,IF(A2<=100,A2*K2,IF(A2<=300,100*K2+(A2-100)*L2,IF(A2<=500,300*L2+(A2-300)*M2,IF(A2<=800,500*M2+(A2-500)*N2,IF(A2>800,800*N2+(A2-800)*O2))))))) 08:06
I hate formulas like this in excel:'( 08:07
ravenousmoose given the amount of parens in that formula, you might want to look into Lisp 08:10
you'd feel right at home :')
crella With perl6, I don't always need to declare the type of a variable, this is very convenient for me and stops me for switching to VB.net and lua, although sometimes I always find a variable printing (Any) because it isn't used or assigned. 08:12
crella And using perl6, I am free from the vlookup in Excel which takes up much time, because without VBA, some vlookup results store in cells, and one results needs 5 vlookups:'( . 08:14
I want to ask how can I stop the script when a variable hasn't been assigned a value? 08:16
One example file: 08:18
** start of a \t divided txt **
a 1
b 3
Sorry, Wechat can withdraw the message and I am not used to Pidgin :-( 08:19
ravenousmoose If I understand your question correctly, I think you might be able to do what you want by checking if the variable is defined 08:20
jmerelo hi, crella!
crella: you can use defined
ravenousmoose ^
jmerelo m: my $x; exit if ! defined $x; say $x;
camelia ( no output )
jmerelo m: my $x=3; exit if ! defined $x; say $x;
camelia 3
jmerelo m: my $x=3; exit if ! $x.defined; say $x; 08:21
camelia 3
jmerelo m: my $x; exit if ! $x.defined; say $x;
camelia ( no output )
jmerelo m: my $x; exit if $x.!defined; say $x;
camelia 5===SORRY!5=== Error while compiling <tmp>
Malformed postfix call
at <tmp>:1
------> 3my $x; exit if $x.7⏏5!defined; say $x;
crella I mean that if a variable is not assigned, that the program will quit with a relative message like 'use strict; use warnings;' in perl 5
jmerelo m: my $x; exit if $x!defined; say $x;
camelia 5===SORRY!5=== Error while compiling <tmp>
Private method call to defined must be fully qualified with the package containing the method
at <tmp>:1
------> 3my $x; exit if $x!defined7⏏5; say $x;
expecting any of:
method…
crella that needn't I check all the variable by hand 08:22
jmerelo crella: you need to define the scope or type of all variables in perl6 08:23
m: say $x
camelia 5===SORRY!5=== Error while compiling <tmp>
Variable '$x' is not declared
at <tmp>:1
------> 3say 7⏏5$x
jmerelo strict ahd warnings are there by default. 08:24
crella Oh, oh
And I want to ask another question 08:26
jmerelo crella: sure 08:27
crella ** start of a tab divided txt **
a3
b4
c5
b6
a3
c9
** end of the txt **
I need to add up all the numbers with A and all the numbers with B separately, the txt can be up to 20MB large with a million lines, how can I write the script to finish the work with less time? 08:29
I currently use "for $rf.line -> $curline" as the main cycle 08:30
jmerelo m: my @list = ( <a 3>, <b 2>, <a 3>}; say sum @list.grep( *[0] eq 'a' ).map( *[1] ) 08:32
camelia 5===SORRY!5=== Error while compiling <tmp>
Unable to parse expression in parenthesized expression; couldn't find final ')' (corresponding starter was at line 1)
at <tmp>:1
------> 3my @list = ( <a 3>, <b 2>, <a 3>7⏏5}; say sum @list.gr…
jmerelo m: my @list = ( <a 3>, <b 2>, <a 3>}; say sum @list.grep( *.[0] eq 'a' ).map( *.[1] )
camelia 5===SORRY!5=== Error while compiling <tmp>
Unable to parse expression in parenthesized expression; couldn't find final ')' (corresponding starter was at line 1)
at <tmp>:1
------> 3my @list = ( <a 3>, <b 2>, <a 3>7⏏5}; say sum @list.gr…
jmerelo m: my @list = ( <a 3>, <b 2>, <a 3>}; say @list.grep( *.[0] eq 'a' )
camelia 5===SORRY!5=== Error while compiling <tmp>
Unable to parse expression in parenthesized expression; couldn't find final ')' (corresponding starter was at line 1)
at <tmp>:1
------> 3my @list = ( <a 3>, <b 2>, <a 3>7⏏5}; say @list.grep(…
jmerelo m: my @list = ( <a 3>, <b 2>, <a 3>); say @list.grep( *.[0] eq 'a' )
camelia ((a 3) (a 3))
jmerelo m: my @list = ( <a 3>, <b 2>, <a 3>); say @list.grep( *.[0] eq 'a' ).map( *.[1] )
crella My laptop is 4G mem and i3 4005u processor, and if I can't make use of the two physical cpu cores, it takes really much time. On my office PC with G4650 Gold, it still takes some time, so I wonder the performance improvement
camelia (3 3)
jmerelo m: my @list = ( <a 3>, <b 2>, <a 3>); say sum @list.grep( *.[0] eq 'a' ).map( *.[1] )
camelia 6
jmerelo crella ^^^ First you select those whose first column is equal to a, then you select the second element of that. You can use hyper also to speed it up. 08:33
m: my @list = ( <a 3>, <b 2>, <a 3>); say sum @list.hyper.grep( *.[0] eq 'a' ).map( *.[1] )
camelia 6
jmerelo ^^^ crella Your mileage might vary, though. 08:34
crella My example text is far too easy comparing with my real job.:-[ Can your device support East Asian fonts?
jmerelo crella: it does. No problem 08:35
crella I paste the example source to pastebin, wait a moment 08:36
crella Oh my annotation is all in Chinese, and you won't be able to understand. 08:38
jmerelo crella: I can use google translate. But there should be no problem if you use anything instead of "a". Perl6 does Unicode all the way. 08:39
crella Few workmates support me to use scripts rather than WPS to finish the job, although WPS sometimes break down because the data is too large 08:40
jmerelo crella: no idea what's WPS. Perl6 shouldn't be a problem... Just give it a try 08:42
ravenousmoose jmerelo, WPS is a free Office suite 08:43
jmerelo ravenousmoose: ah, OK. Didn't know. 08:44
ravenousmoose: thanks.
crella Usually there're 3000 lines in the source file, Row A with 200 names that are not repeated, Row B as numbers, Row C as text, ... , And among the 200 names, there are 40 A-type names and 160 B-type names. One B-type name is a child to a special A-type name. 08:45
jmerelo crella: if by child you mean it's a combination of characters, perl 6 can do that too. 08:46
crella: as I say, shouldn't be a problem.
crella If I use the sum @lists.grep method, can it still be as fast as the cycle 'for $readfile.lines -> $curline'? 08:46
jmerelo crella: grep should be a bit faster. Hyper would use multithreading if available, should make it 4x faster. 08:48
crella Actually I am a statistical clerk in a logistics company
moritz if you are reading from a file, that will usually be the slowest part 08:49
crella Now I have a try 08:50
jmerelo crella: good luck. 08:53
crella1 If i am reading from a tabbed-divided txt file ? I once slurp all the lines and split '\t' and stored them in an array and that use too much memory, as my txt contains Chinese text 08:56
crella1 The annoying CMCC Net 08:57
crella1 I think it's not good because a tabbed-divided file isn't a list or array 09:01
crella1 Reading from a txt really consumes time. 09:01
crella1 If only I have 16G memory! 09:02
crella1 Is there a method to read 2 lines in a time and use subs to work with the 2 lines in a time while keeping the data summary is accurate, like the excel multiprocessing summarizing, with low memory usage? 09:07
Comparing to excel, scripts use much more memory when reading all the text file 09:08
jmerelo crella1: reading from a file is "lazy". It will only read what is being processed. 09:09
crella1 Will perl6 reading from sqlite3 much faster? How fast? Because small data needn't to be converted to sqlite3, while large data needs 09:14
jmerelo crella1: there's a SqLite driver that's quite good. Also pgsql and mysql.
crella1: the last ones are concurrent, so that might be quite faster. More memory consuming, too. 09:15
crella1 Oh the pidgin support of IRC is outdated I think ,what clients do you use? 09:16
eseyman crella1: irssi 09:18
crella1 In China, when I am studying in a primary school , the computer lesson teaches PC Logo (cracked version) in Grade 5 and VB6 in Grade 6, Flash and Photoshop in junior high school and senior high school. The national computer rank exam checks C lang with codeblocks or Java with Netbeans or MSAccess or MSOffice skills, and I failed the Java exam during university. 09:20
kudzo crella1, xchat 09:21
crella1 Now python exam is also provided/
After my failure in Java exams, I completely give up to change my career to a programmer. It feels that you can understand all things you read , but you can't use them to work out a result. 09:23
crella1 And I find perl6 printing to cygwin sometimes miss some string. Windows cmd doesn't support many functions. I currently using powershell, and powershell launches perl6 use much a lot of time than cmd. 09:32
jmerelo crella1: weechat 09:34
jmerelo crella1: that might be a console problem, not a perl6 problem... Try and save to file. 09:34
crella1 All thanks to the f**king windows 10 09:35
scimon I had all kinds of horrible times using powershell on Windows 10. 09:39
jmerelo crella1: amazing (except for the Flash thing, of course) Java is not the best thing to learn, probably... 09:40
scimon If it helps I drop out from Uni, spent a few years working retail and for a bank before learning Perl and actually getting a career in it. My first coding job I was 28. 09:47
crella After the national exam added python3, I think many classmates will hate python, because most people recommend to use python in place of Java because of python's simplicity, while python isn't always easy. Tabs can easily get classmates crazy, who can't even install an Office 2010 with KMS activated, or install a CAD 2010 09:58
jmerelo crella: well, it's simple. Probably not easy, but simple. 10:00
crella And if there's any GUI support for perl6 right now? I doesn't know how to use the perl6 modules searching. 10:21
crella Now I use PECMD.exe extracted from common PE images for Windows, and PECMD supports message box and background executing files. 10:22
ravenousmoose Also dropped out of uni for CS, but luckily landed a programming job straight away 10:25
although it *is* mainly in Java, so that may or may not be any better than working retail for now
crella And between the two methods below, which is faster ? Method A: for $readfile.lines -> $curline { dosomejob();} Method B: my $lineid = 0; my $linestr = ''; while $lineid <= $readfile.lines.elems { $linestr = $readfile.lines[$lineid]; dosomejob(); $lineid++;} 10:27
And how can I reduce memory usage by setting some variables to null or ''? 10:28
jnthn crella: Method A will read the file line by line and discard each after it's been read (though of course if you stash it somewhere it lives on). Method B will retain every string in memory, which probably means more GC work. It's probably also more work anyway; the lines iterator is well optimized. 10:30
crella Oh thanks 10:34
crella_p right now can i write a gui program with perl6? i switched to android irc software and miss the chat record before 10:53
perl 5's win32gui is pretty good 10:55
jmerelo crella_p: there's a GTK module. 10:56
crella_p: github.com/perl6/gtk-simple
crella_p ok
jmerelo crella_p: not sure about Windows, though.
scimon crella_p: gtk-simple is pretty easy to use. I managed to learn it an knock up a GUI with it in a few days for the Advent calendar last year. (As every other idea I had someone else did first). 11:06
crella_p I remembered that during some time in my university, I use debian8 or opensuse, thus I have to give up revising my vb6 easy skills in high scholl. That time I hadn't heard of nodejs, and I kept thinking I am doing usefulness thing in a browser by using javascript. And I once copyed the html to android and opened it in android browser to test the js running result. Bored of javascript in a browser, I heard that all linux dists provides perl, not p… 11:11
…ython, originally, so I picked perl5 to learn.
Even in my school's CS major, HCI labs, few people except the leaders had heard of perl, so that time when I asked why my perl scripts ran so slow, I got few answers. That time python and ruby was vert popular in China, and manh articles about perl was outdated and not detailed. 11:14
Now some UGC web blogs have provided useful contents created by individual bloggers, such as Jianshu. I read some translated tutorials from Jianshu. It is easy to recognize some words and some lines in foreign language, but not easy for a whole article. 11:21
In China's quora-like platform, Zhihu, there're still people criticising perl6 as hard to read and recode, by giving some special complicated examples (grammar candies). 11:28
AlexDaniel crella_p: that's interesting 11:29
crella_p But when introducing python, they always provide python examples that show the shortest scripts and clapped that python is great! 11:32
crella_p I can't use python, or I will try to write perl6 scripts with same functions, and most important, provide the snaps that I just wrote it in notepad2mod. (always) 11:34
If I combine my work scripts in a files and add a input line as a shell, it's up to 1000 lines. 11:35
I have learned and practised to keep scripts and database not in a file, which benefits a lot. And later different functions need different database, so I divided the 1000-line script into a few smaller independent pieces. 11:38
Ulti crella_p: github.com/Garland-g/perl6-libui/wiki if you want to be super edgy 11:42
my personal preference is just make a webapp even if its for local UI
crella_p2 Miniblink, which is free to use with fewer functions than its commercial version, is a simplified CEF that supports nodejs. 11:44
crella_p2 It provides C API, and I am an idiot to C lang, or I will choose it to write GUI. 11:45
timotimo chrome embedded framework? 11:46
crella_p2 Yes, a simplified one.
timotimo ah
there is an electron module for perl6! i have not tried it
github.com/azawawi/perl6-electron 11:47
Xliff m: "ns.field" ~~ / [ <:letter>+ ] %% '.' / 11:50
camelia 5===SORRY!5=== Error while compiling <tmp>
Missing quantifier on the left argument of %%
at <tmp>:1
------> 3"ns.field" ~~ / [ <:letter>+ ] %%7⏏5 '.' /
Xliff m: "ns.field" ~~ / [ <:letter>+ ]+ %% '.' /
camelia ( no output )
Xliff m: "ns.field" ~~ / [ <:letter>+ ]+ %% '.' /.say
camelia / [ <:letter>+ ]+ %% '.' /
Xliff m: ("ns.field" ~~ / [ <:letter>+ ]+ %% '.' /).gist.say
camelia 「ns.field」
crella_p2 Haha, chrome is getting more and more crazy when consuming larger and larger memory.
Xliff m: ("ns.field" ~~ / [ <:letter>+ ] ** 1..3 %% '.' /).gist.say
camelia 「ns.field」
Xliff m: ("ns.field." ~~ / [ <:letter>+ ] ** 1..3 %% '.' /).gist.say
camelia 「ns.field.」
Xliff m: ("ns.table.field." ~~ / [ <:letter>+ ] ** 1..3 %% '.' /).gist.say 11:51
camelia 「ns.table.field.」
Xliff m: ("ns.table.field.bad" ~~ / [ <:letter>+ ] ** 1..3 %% '.' /).gist.say
camelia 「ns.table.field.」
Xliff m: ("ns.table.field.bad" ~~ / [ <:letter>+ ] ** 1..3 %% '.' <!before '.'> /).gist.say
camelia 「ns.table.field.」
Xliff m: ("ns.table.field." ~~ / [ <:letter>+ ] ** 1..3 %% '.' <!before '.'> /).gist.say
camelia 「ns.table.field.」
crella_p2 While chrome-based browsers optimise the memory usage quite good. I use chrome-based browser English version, because the Chinese version usually annoys users in many ways. 11:53
In China now is spring festival so I have some free time to chat╮(‵▽′)╭ 11:56
jmerelo crella_p2: you celebrate spring festival in winter? Still 45 days to get to spring here... 12:00
crella_p2 agricultural calendar, common in coutries like Japan, Korea, Vietnam ... 12:02
Xliff \o jmerelo 12:04
".field" ~~ /^ [ <!after '.'> [ <:letter>+ ] ** 1..2 %% '.' ] / <- Is there a way to get perl6 to throw an error in this situation?
Xliff m: ("..field" ~~/ <!after '.'> [ [ <:letter>+ '.' ]? <:letter>+ '.' ]? <:letter>+ /).gist.say 12:13
camelia 「ield」
Xliff m: ("..field" ~~/ [ [ <:letter>+ '.' ]? <:letter>+ '.' ]? <:letter>+ /).gist.say 12:14
camelia 「field」
Xliff m: ("..field" ~~/ '.'{die ":P"} [ [ <:letter>+ '.' ]? <:letter>+ '.' ]? <:letter>+ /).gist.say
camelia :P
in block <unit> at <tmp> line 1
Xliff m: (".field" ~~/ '.'{die ":P"} [ [ <:letter>+ '.' ]? <:letter>+ '.' ]? <:letter>+ /).gist.say
camelia :P
in block <unit> at <tmp> line 1
Xliff m: ("field" ~~/ '.'{die ":P"} [ [ <:letter>+ '.' ]? <:letter>+ '.' ]? <:letter>+ /).gist.say
camelia Nil
Xliff m: ("ns.field" ~~/ '.'{die ":P"} [ [ <:letter>+ '.' ]? <:letter>+ '.' ]? <:letter>+ /).gist.say 12:15
camelia :P
in block <unit> at <tmp> line 1
Xliff m: ("ns.field" ~~/ ^ '.'{die ":P"} [ [ <:letter>+ '.' ]? <:letter>+ '.' ]? <:letter>+ /).gist.say
camelia Nil
Xliff m: ("ns.field" ~~/ ^ '.'{die ":P"}? [ [ <:letter>+ '.' ]? <:letter>+ '.' ]? <:letter>+ /).gist.say
camelia 5===SORRY!5=== Error while compiling <tmp>
Can only quantify a construct that produces a match
at <tmp>:1
------> 3("ns.field" ~~/ ^ '.'{die ":P"}?7⏏5 [ [ <:letter>+ '.' ]? <:letter>+ '.' ]?
Xliff m: ("ns.field" ~~/ ^ '.'?{die ":P"} [ [ <:letter>+ '.' ]? <:letter>+ '.' ]? <:letter>+ /).gist.say
camelia :P
in block <unit> at <tmp> line 1
Xliff m: ("ns.field" ~~/ ^ ['.'{die ":P"}]? [ [ <:letter>+ '.' ]? <:letter>+ '.' ]? <:letter>+ /).gist.say
camelia 「ns.field」
Xliff m: (".ns.field" ~~/ ^ ['.'{die ":P"}]? [ [ <:letter>+ '.' ]? <:letter>+ '.' ]? <:letter>+ /).gist.say 12:16
camelia :P
in block <unit> at <tmp> line 1
Xliff m: (".ns.field" ~~/ ^ ['.'{.gist.say}]? [ [ <:letter>+ '.' ]? <:letter>+ '.' ]? <:letter>+ /).gist.say 12:21
camelia .ns.field
「.ns.field」
Xliff m: (".ns.field" ~~/ ^ ['.'{$/.gist.say}]? [ [ <:letter>+ '.' ]? <:letter>+ '.' ]? <:letter>+ /).gist.say
camelia 「.」
「.ns.field」
Xliff m: ("ns.table.field." ~~ / [ <:letter>+ ] ** 1..3 %% '.' { .gist.say} <!before '.'> /).gist.say 12:23
camelia ns.table.field.
「ns.table.field.」
Xliff m: ("/ns.table.field." ~~ / [ <:letter>+ ] ** 1..3 %% '.' { .gist.say} <!before '.'> /).gist.say
camelia /ns.table.field.
「ns.table.field.」
Xliff m: ("..ns.table.field." ~~ / [ <:letter>+ ] ** 1..3 %% '.' { .gist.say} <!before '.'> /).gist.say
camelia ..ns.table.field.
「ns.table.field.」
Xliff m: ("..ns.table.field." ~~ / [ <:letter>+ ] ** 1..3 %% '.' { $/ = Nil if .starts-with('.') or .ends-with('.') } <!before '.'> /).gist.say 12:24
camelia 「ns.table.field.」
Xliff m: ("..ns.table.field." ~~ / [ <:letter>+ ] ** 1..3 %% '.' { Nil if .starts-with('.') or .ends-with('.') } <!before '.'> /).gist.say
camelia 「ns.table.field.」
Xliff m: ("..ns.table.field." ~~ / [ <:letter>+ ] ** 1..3 %% '.' { .fail if .starts-with('.') or .ends-with('.') } <!before '.'> /).gist.say 12:25
camelia No such method 'fail' for invocant of type 'Str'. Did you mean any of these?
all
flip
tail

in block <unit> at <tmp> line 1
Xliff m: ("..ns.table.field." ~~ / [ <:letter>+ ] ** 1..3 %% '.' { $/.fail if .starts-with('.') or .ends-with('.') } <!before '.'> /).gist.say
camelia No such method 'fail' for invocant of type 'Match'. Did you mean any of these?
all
flip
tail

in block <unit> at <tmp> line 1
Xliff m: ("..ns.table.field." ~~ / [ <:letter>+ ] ** 1..3 %% '.' { .FAILGOAL if .starts-with('.') or .ends-with('.') } <!before '.'> /).gist.say 12:26
camelia No such method 'FAILGOAL' for invocant of type 'Str'
in block <unit> at <tmp> line 1
12:27
ccc_ p6: sub nlst(UInt :$pos, :@lstoflst) {say @lstoflst[$pos]}; say nlst(:n(0), :@lstoflst([[0,2,3],[1,4]])); say nlst(:n(0), :@lstoflst([[0,2,3]])) 14:25
camelia 5===SORRY!5=== Error while compiling <tmp>
Variable '@lstoflst' is not declared
at <tmp>:1
------> 3{say @lstoflst[$pos]}; say nlst(:n(0), :7⏏5@lstoflst([[0,2,3],[1,4]])); say nlst(:n
ccc_ p6: sub nlst(UInt :$pos, :@lstoflst) {say @lstoflst[$pos]}; say nlst(:n(0), :lstoflst([[0,2,3],[1,4]])); say nlst(:n(0), :lstoflst([[0,2,3]])) 14:26
camelia Unexpected named argument 'n' passed
in sub nlst at <tmp> line 1
in block <unit> at <tmp> line 1
ccc_ p6: sub nlst(UInt :$pos, :@lstoflst) {say @lstoflst[$pos]}; say nlst(:pos(0), :lstoflst([[0,2,3],[1,4]])); say nlst(:pos(0), :lstoflst([[0,2,3]])) 14:27
camelia [0 2 3]
True
0
True
ccc_ p6: sub nlst(UInt :$pos, :@lstoflst) {say @lstoflst[$pos]}; nlst(:pos(0), :lstoflst([[0,2,3],[1,4]])); nlst(:pos(0), :lstoflst([[0,2,3]]))
camelia [0 2 3]
0
ccc_ Why isn't the output «[0 2 3]␤[0 2 3]␤» ? 14:29
When there's a single item in the list it seems to throw away the outer list 14:30
jnthn Single argument rule
ccc_ p6: hmm?
camelia 5===SORRY!5=== Error while compiling <tmp>
Bogus postfix
at <tmp>:1
------> 3hmm7⏏5?
expecting any of:
infix
infix stopper
statement end
statement modifier
statement modifier loop
ccc_ hmm? 14:31
jnthn [one-iterable-thing-here] will always iterate the thing to provide the elments for the array
That's why you can write [1..10] to get an Array of 10 elements, not one element.
ccc_ so how would I write nlst to do the right thing 14:32
jnthn Needs to be `[[0,2,3],]` instead, so that the single argument is a List
ccc_ how does the caller know to do that
jnthn I don't think nlst is the problem, just the input that you're passing
ccc_ p6: say [[0,2,3]]
camelia [0 2 3]
jnthn It's just a general Perl 6 array behavior
*array literal 14:33
ccc_ so I want a list of lists to stay a list of lists even if there's only 1 item how do I do that
jnthn Add the trailing , like I showed
ccc_ how's the done dynamicly? 14:34
this is for a method
timotimo m: my @foo; @foo[0] = [1, 2, 3]; say @foo.perl
camelia [[1, 2, 3],]
ccc_ the caller has to check if there's one element or I have to check if there's one element is that what you're saying?
what does the signature have to be so that a list (or array) stays a list or array even if there's only 1 item 14:36
jnthn I'd expect the caller to correctly form an array of arrays if that's what they meant to pass. [[1,2,3] is simply not an array of array
Everf
*Ever
oops, I missed the closing ]
And that happens at the time the array is being formed, before the call takes place. 14:37
MasterDuke ccc_: docs.perl6.org/type/Signature#Type...parameters might help
jnthn Also docs.perl6.org/syntax/Single%20Argument%20Rule 14:38
ccc_ so my problem is simply syntax of a literal array = nlst would work with with an array of arrays of 1 item that was computed? 14:39
jnthn Yes
MasterDuke [] don't create arrays/lists, commas do. 14:42
ccc_ p6:sub nlst(UInt :$p, :@lst) {say @lst[$p]}; my @arg = [[0,2,3],[1,4]]; nlst(:n(0), @arg); pop(@arg); nlst(:n(0), $arg)
evalable6 (exit code 1) 04===SORRY!04=== Error while compiling /tmp/6cLLj22r29
Variabl…
ccc_, Full output: gist.github.com/e497671c1ebe4be3cb...d24f898e5b
ccc_ p6:sub nlst(UInt :$p, :@lst) {say @lst[$p]}; my @arg = [[0,2,3],[1,4]]; nlst(:n(0), :lst(@arg)); pop(@arg); nlst(:n(0), :lst(@arg)) 14:43
evalable6 (exit code 1) Unexpected named argument 'n' passed
in sub nlst at /tmp/dKs0pyI7De line 1
in block <unit> at /tmp/dKs0pyI7De line 1
Xliff \o 14:44
ccc_ p6:sub nlst(UInt :$p, :@lst) {say @lst[$p]}; my @arg = [[0,2,3],[1,4]]; nlst(:p(0), :lst(@arg)); pop(@arg); nlst(:p(0), :lst(@arg))
evalable6 [0 2 3]
[0 2 3]
ccc_ OK
Thanks 14:45
Xliff m: "..table.field" ~~ / [<:letter>+]+ %% 14:50
camelia 5===SORRY!5=== Error while compiling <tmp>
Missing quantifier on the left argument of %%
at <tmp>:1
------> 3"..table.field" ~~ / [<:letter>+]+ %%7⏏5<EOL>
Xliff m: "..table.field" ~~ / [<:letter>+]+ %%
camelia 5===SORRY!5=== Error while compiling <tmp>
Missing quantifier on the left argument of %%
at <tmp>:1
------> 3"..table.field" ~~ / [<:letter>+]+ %%7⏏5<EOL>
Xliff m: ("..table.field" ~~ / [<:letter>+]+ %% '.' /).gist.say
camelia 「table.field」
Xliff ^^ Is there any way to write a regex that will not match due to the '..' at the beginning without anchoring?
m: ("..table.field" ~~ / <!after '.'> [<:letter>+]+ %% '.' /).gist.say 14:51
camelia 「able.field」
Xliff m: ("..table.field" ~~ / <?after '.'>{ say "wrong dot"} [<:letter>+]+ %% '.' /).gist.say
camelia wrong dot
wrong dot
「table.field」
Xliff Just getting used to triggering code in regexes, too. 14:52
moritz there's a chapter in my regexes+grammars book that talks about that :) 14:53
Xliff Ah!
Xliff moritz: Reading. Which chapter would that be? 15:00
11? 15:01
m: ("..table.field" ~~ / [<:letter>+]+ %% '.' { die "Illegal prefix" if .starts-with('..'); die "Illegal suffix!" if .ends-with('.') } /).gist.say 15:14
camelia Illegal prefix
in block <unit> at <tmp> line 1
Xliff m: (".table.field" ~~ / [<:letter>+]+ %% '.' { die "Illegal prefix" if .starts-with('..'); die "Illegal suffix!" if .ends-with('.') } /).gist.say
camelia 「table.field」
Xliff m: ("table.field/" ~~ / [<:letter>+]+ %% '.' { die "Illegal prefix" if .starts-with('..'); die "Illegal suffix!" if .ends-with('.') } /).gist.say
camelia 「table.field」
Xliff m: ("table.field." ~~ / [<:letter>+]+ %% '.' { die "Illegal prefix" if .starts-with('..'); die "Illegal suffix!" if .ends-with('.') } /).gist.say
camelia Illegal suffix!
in block <unit> at <tmp> line 1
15:15
Xliff \o/
moritz Xliff: 4 15:21
Xliff OK, thanks! 15:24
timotimo .tell cygx i look forward to you having a look at my pull requests and issues for Image::RGBA::Text :) :) 18:44
yoleaux timotimo: I'll pass your message to cygx.
Geth doc: 2cbf85b171 | Coke++ | 2 files
brace/bracket cleanup
20:14
doc: 7e3866c13b | Coke++ | doc/Type/IO/Path.pod6
allow example to compile
synopsebot Link: doc.perl6.org/type/IO::Path
SyrupThinker p6: use NativeCall; sub strlen(Str) returns size_t is native { * }; say strlen("Test").WHAT 21:07
camelia (Int)
SyrupThinker I'd guess this is unintended, right? 21:08
MasterDuke SyrupThinker: what is unintended? 21:23
jnthn size_t is a native type, .WHAT is an object operation, and native integer types will be boxed into an Int in order to do .WHAT 21:27
SyrupThinker I see, so when I return that size_t in a subroutine I must use Int for the typecheck? 21:46
tobs m: use NativeCall; sub strlen(Str) returns size_t is native { * }; sub f ($s --> Int) { strlen($s) }; say f "Test" 21:48
camelia 4
tobs SyrupThinker: from that I'd guess the boxing is automatic 21:48
SyrupThinker Yes, what I tried was...
m: use NativeCall; sub strlen(Str) returns size_t is native { * }; sub f($s --> size_t) { strlen($s) }; say f("Test"); 21:49
camelia 4
SyrupThinker Wut
m: use NativeCall; sub strlen(Str) returns size_t is native { * }; sub f($s --> size_t:D) { strlen($s) }; say f("Test"); 21:50
camelia Type check failed for return value; expected NativeCall::Types::size_t:D but got Int (4)
in sub f at <tmp> line 1
in block <unit> at <tmp> line 1
SyrupThinker Ahh
So... I guess the problem is that native types don't have a concept of undefiendness and the :D makes no sense...
Anyway, thanks, that clears it up for me 21:51
tobs There's a snippet on docs.perl6.org/type/Signature#inde...raint_%3AD which makes me believe that :D is equivalent to testing .DEFINITE, which would require boxing to an Int again, I suppose 21:54
But I don't _know_ more than you about it.
timotimo SyrupThinker is right, natives don't have a concept of undefinedness 22:08
TreyHarris It looks like the built-in USAGE generator doesn't do any line wrapping. Is there a way to specify a line break in a declarator POD block? 22:39
Altreus I can construct a DateTime from a list of 6 integers, and I can construct a list of 6 "integers" by applying a regex to a string, but I can't figure out how to correctly deconstruct the Match object so I can slip it directly into DateTime.new «DateTime.new( $dt ~~ /(\d ** 5)(\d ** 2) ** 5/ )» 22:40
Altreus Obviously this is a very perl5 thing to do, but it's also kinda why I use perl :P 22:41
Also obviously this makes a bit of a multidimensional result 22:42
it's DRYer though :P
leont TreyHarris: you can override the default usage generator 22:47
Altreus: I suspect the solution will involve zipping 22:48
Altreus I got away with 2 lines 22:54
one doing the regex; and then DateTime.new($/[0], |$/[1])
tobs m: DateTime.new: |("123456" ~~ /(\d) ** 6/).values».Int 22:55
camelia ( no output )
tobs m: say DateTime.new: |("123456" ~~ /(\d) ** 6/).values».Int
camelia 0001-02-03T04:05:06Z
leont Sounds like DateTime is lacking a good strptime 22:57
Altreus so is DateTime::Format 22:58
:)
Altreus I couldn't see a simple way of turning my match into a single list 23:01
or, I guess, otherwise splitting the string into a 4 and five 2s
TreyHarris A Match is a Capture, in that Match is a subclass of Capture. So...
m: my $d = '17:22 GMT 2017-01-22'; DateTime.new(|($d ~~ /$<hour>=(\d\d?) ':' $<minute>=(\d\d) <ws> 'GMT' <ws> $<year>=(\d**4)'-'$<month>=(\d\d)'-'$<day>=(\d\d)/)) 23:02
camelia ( no output )
TreyHarris m: my $d = '17:22 GMT 2017-01-22'; say DateTime.new(|($d ~~ /$<hour>=(\d\d?) ':' $<minute>=(\d\d) <ws> 'GMT' <ws> $<year>=(\d**4)'-'$<month>=(\d\d)'-'$<day>=(\d\d)/))
camelia 2017-01-22T17:22:00Z
Altreus well yeah but that's more complicated
especially since that's not my format :)
TreyHarris I'm a little bewildered by your format... you have 5 groups of 5 digits followed by 2 digits. How do 35 digits become a DateTime object? 23:07
Semantically, I mean... you're asking about the syntax 23:08
b2gills m: my $d = '17:22 GMT 2017-01-22'; say DateTime.new: |+«$d.comb(/\d+/)[2,3,4,0,1], 0 23:11
camelia 2017-01-22T17:22:00Z
Altreus do I? 23:13
TreyHarris b2gills: sure, I was going to develop from the above most-explicit version to more-and-more golfed, but since Altreus says the issue is his format, I'm wondering how 35 digits make up a 5-element DateTime
Altreus (\d ** 5)(\d ** 2) ** 5
sorry I keep doing that
(\d ** 4)(\d ** 2) ** 5
did it in my program too and took me ages to figure out why it stopped matching 23:14
TreyHarris Yes, 7 times 5 is 35. 6 times 5 is 30... how do 30 digits become a DateTime? 12 would be the usual number of digits
Altreus but
it's 4 digits and 5 groups of 2
TreyHarris Oh, I see. I was decomposing into rx's on my side to try to make it easier, but I grouped it wrong 23:17
b2gills m: my $d = '20190205171724'; say DateTime.new: |$d.comb(/^\d ** 4|\d ** 2/) 23:19
camelia 2019-02-05T17:17:24Z
Altreus comb :o 23:22
so many routines new to perl6
TreyHarris But that comb only works because DateTime happens to supply a positionals-only .new. 23:25
tobs m: multi mycomb (Str:D $s, *@sizes) { $s.comb.rotor(@sizes)».join }; say DateTime.new: "20180206002640".&mycomb(4, 2 xx 5) 23:27
camelia Cannot resolve caller new(DateTime:U: List:D); none of these signatures match:
(DateTime: \y, \mo, \d, \h, \mi, \s, :$timezone = 0, :&formatter, *%_ --> DateTime:D)
(DateTime: :$year!, :$month = 1, :$day = 1, :$hour = 0, :$minute = 0, :$se…
tobs m: multi mycomb (Str:D $s, *@sizes) { $s.comb.rotor(@sizes)».join }; say DateTime.new: |"20180206002640".&mycomb(4, 2 xx 5)
camelia 2018-02-06T00:26:40Z
tobs at some point, maybe it's best to define your own sub? 23:28
Elronnd there seems to be a typo at docs.perl6.org/language/io-guide#S..._IO::Path; 'foo'.IO should be 'foo'.Str? Is there somewhere I can open a ticket about this? 23:33
jnthn Elronnd: github.com/perl6/doc/issues 23:36
TreyHarris Elronnd: No, that's actually correct, it's just that the intro is poorly worded 23:41
Note the earlier example uses `~` to stringify the IO object. The second uses .absolute and .relative 23:42
If $path were a Str object, the example would be pointless because Str doesn't have .absolute and .relative methods 23:43
Elronnd TreyHarris: ahhh 23:48
TreyHarris IMO, if you're passing a sequence into a positional, unless you're one-off or one-lining it, you should break it up into a couple steps in most cases--this one is maybe the exception because DateTime has a well-ordered sequence of arguments that all have 0 defaults. That's really rare. 23:49
kybr i think someone kybr: to me in the last few days. does anyone know how to search the backlog in weechat? i am not much of an IRC user anymore :) 23:59