>> 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: [email protected]<mailto:[email protected]>
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 <[email protected]>
Sent: Thursday, August 27, 2020 8:41 PM
To: [email protected] <[email protected]>
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}