>> 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}

Reply via email to