>> Without any arguments, sub lines operates on $*ARGFILES, which >> defaults to $*IN in the absence of any filenames.
> Be careful with that one, $*IN will lop of the first line if you are not > careful. I think you're talking about mixing $*IN with the "-n" option # raku -e 'say join(", ", $*IN.lines())' < /tmp/lines.txt lines 1, lines 2, lines 3, lines 4, lines 5 # raku -ne 'say join(", ", $*IN.lines())' < /tmp/lines.txt lines 2, lines 3, lines 4, lines 5 It's not lopping, the "-n" takes one line from $*IN before your code executes. a p.s. "cryptogram", at least in my newspaper, is a quote and author's name encoded in a substitution cipher (G for A etc) to solve. Andy Bach, BS, MSCMECFA Systems Mangler Internet: andy_b...@wiwb.uscourts.gov<mailto:andy_b...@wiwb.uscourts.gov> Voice: (608) 261-5738, Cell: (608) 658-1890 "The three great problems of computer science: compiler complexity and 'off-by-one' errors". https://martinfowler.com/bliki/TwoHardThings.html ________________________________ From: ToddAndMargo via perl6-users <perl6-us...@perl.org> Sent: Thursday, August 27, 2020 8:41 PM To: perl6-us...@perl.org <perl6-us...@perl.org> Subject: Re: Raku User's Survey 2020 out now.... On 2020-08-27 16:53, Daniel Long Sockwell wrote: >> Very few of the other [methods are documented] this way. >> This one also started with an error in the cryptogram >> as well. (That is another complaint about the >> documentation. The cryptograms are often wrong.) >> And there should be zero tolerance for "insider knowledge". > > This might be a bit ironic, but I can't follow what you're saying here. > What do you mean by "cryptogram"? To me, that strikes me as _much_ more > of an esoteric term than anything in the Raku docs -- but maybe it has a > common meaning in this context that I just haven't come across (and that > a basic Internet search didn't turn up). Here is one. multi method starts-with(Str:D: Str(Cool) $needle, :i(:$ignorecase), :m(:$ignoremark) --> Bool:D) This one is pretty easy to figure out. Most of the time though, I get the "what is the world?" thing. When I do figure them out and they are correct, they can actually be very helpful. And I never remember the official name. >> And "in your face example" would be one of my all time >> favorite routines which is "lines". I use "lines" >> ALL-THE-TIME. >> >> https://docs.raku.org/routine/lines > > This is so fascinating to me -- you provide that as an example of poor > documentation, but *I* would look at that as an area where Raku (with > the help of its docs) just clicks perfectly into place. Everything that > the docs explain for this and related topics fits together into a > cohesive whole, and after reading the docs, I not only see how the language > works, but am also left with the feeling that the language couldn't > possibly work any other way. I picked "lines" on purpose as I KNOW ow it operates. It is one sweet function, especially when I am careening through raw web pages. I as not looking for help with it. > >> Without any arguments, sub lines operates on $*ARGFILES, which >> defaults to $*IN in the absence of any filenames. Be careful with that one, $*IN will lop of the first line if you are not careful. > If you're willing to post your "keepers", I bet others would enjoy > reading them as well. Most of them are written specifically for me. As you can tell, I am "weird". It would be anenormous undertaking for me to clean most of them up. Usually, when someone asks about a specific thing I have a keeper on, I will (clean it up and) post it back. Or if I am just tickled with what I came up with. When I do, I get all my misspelling pointed out an any booboo annotated. It does really help enormously. Since you are working on the documentation, feel free to ping me to see if I have something written on the subject. I am more than happy to have you use from it. Or maybe just to see what I find important about he subject. > >> Hope that explains it. I ADORE Raku. The only thing >> I dislike is the documentation. > > I'm glad you like Raku -- I feel the same way. Now, I'm going to get > back to trying to improve the documentation; I've submitted two pull > requests today, and am making decent progress towards a third. Maybe > one day, you'll like the docs as much as you like the language itself. I have programmed in several languages in my lifetime. I have to say, Raku is just damned fun to program in! And the community is wonderful. -T p.s. my favorite variable is the Associative Array (hash). (I like put both descriptions together as it nicely describes what a has is.) Here is my keeper on a hash: 12/08/2019: Perl 6 Hashes (associative arrays): References: https://docs.raku.org/language/subscripts#Basics https://docs.raku.org/type/Hash#___top https://docs.raku.org/type/Hash#:exists https://docs.raku.org/type/Hash#method_append A hash "associates" a Name, called a "key" to a Value, called a "value" You assign them as follows: # use whatever is easiest on the eyes my %h = a => "A", b => "B"; or my %h = ( a => "A", b => "B" ); or my %h = [ a => "A", b => "B" ]; {a => A, b => B} say %h.keys (b a) say %h.values (B A) Confining hashes: Note: as of 2020-01-15, confining only works with Str and Int. And you must confine the entire hash, not each member my Str %h = A => "a" {A => a} my Int %h = A => 123 {A => 123} my int %h = A => 123 native value types for hashes not yet implemented. Sorry. You read them as follows: $v = %h<b> B When the key is a variable, your read them as follows $k = "a" $v = %h{$k} You write to them as follows: %h<b> = "B"; When the key is a variable, your read them as follows $k = "a" %h{$k} = $v; To add or delete and element, see the sections below labeled Adding a key/value pair: Deleting a key/value pair: Looping through a hash: Note: hashes DO NOT loop in the order that they were entered into the hash for %x.kv -> $key, $value {do something}; For example: my %h = a => "x", b=>"r", c=>"z"; for %h.kv -> $key, $value {say "key = $key value = $value"; } key = c value = z key = a value = x key = b value = r Array's of hashes: To access values inside and array of hashes: my @a; my %h = a=>"A", b=>"B"; push @a, %h; Access: $x = @a[0]{"a"} # Note: you need the quotes modify: @a[0]{"b"} = "BB" How to use arrays of hashes: my @a; my %h1; my %h2; %h1 = a => 0, b => 1, c => 2; %h2 = a => 9, b => 8, c => 7; push @a, {%h1}; push @a, {%h2}; say @a; [{a => 0, b => 1, c => 2} {a => 0, b => 1, c => 2}] for @a.kv -> $i, $h { say "$i\n" ~ "$h\n"; }; # Note: the ~ is to make it easier to read # even though $h is address as $ it is a hash 0 a 0 b 1 c 2 1 a 9 b 8 c 7 Checking for the presence of a key/value: Warning: a Gotcha: if using the "if" statement to check for the existence of a key, it will return false if it does not find the key, but it will also return false if it finds the key and its value is a numerical zero, which "if" interprets as a Boolean false. Note: "exists" is called an "adverb" in this context my %h = a => "x", b=>0, c=>"z"; if %h<d>:exists { say "exists"; } else { say "DOES NOT exist"; } DOES NOT exist if %h<b>:exists { say "exists"; } else { say "DOES NOT exist"; } exists Adding a key/value pair: my %h = a => "x", b=>"r", c=>"z"; %h.append( 'd', "D" ) # note: you need the '' {a => x, b => r, c => z, d => D} Deleting a key/value pair: Note: "delete" is called an "adverb" in this context my %h = a => "x", b=>"r", c=>"z"; %h<b>:delete; say %h {a => x, c => z} Display a key/value pair (:p adverb): my %h = a => "x", b=>"r", c=>"z"; say %h<a>:p; a => x say %h<a b>:p; # note: no comma between the a and the b (a => x b => r) Return the key and value with the :k and :v adverbs: my %h = a => 1, b => 2; say %h<a>:k; a say %h<a b>:k; (a b) say %h<a b>:v; (1 2) Empty <> return everything: say %h<>:v; (2 1) say %h<>:k; (b a) "returns" hash on a sub declaration: Note: "Associative" will return a hash or a map or even a pair > sub x() returns Associative { my %h= A=>"a"; return %h} &x > x {A => a} > sub x(--> Hash) { my %h= A=>"a", B=>"b"; return %h} &x > x {A => a, B => b} > > sub x() returns Hash { my %h= A=>"a"; return %h} &x > x {A => a}