On Mon, May 18, 2020 at 03:51:30PM -0700, ToddAndMargo via perl6-users wrote:
> On 2020-05-18 15:44, Tom Browder wrote:
> > On Mon, May 18, 2020 at 16:19 ToddAndMargo via perl6-users
> > <perl6-us...@perl.org <mailto:perl6-us...@perl.org>> wrote:
> > 
> >     On 2020-05-18 13:28, Tom Browder wrote:
> > 
> > ...
> > 
> >      > Try:
> >      >
> >      > 'say so "test".IO.d'
> > 
> > 
> > Todd, you didn't try what I suggested. Once again, look a the line above^^
> > 
> > There is no "if" there.
> > 
> > -Tom
> > 
> 
> It was the "if" I was interested in.  "if" has to change
> a True or "useless text message" into a True or False.

No, that's not what "if" does. "If" in Raku works pretty much
the same way as "if" in Perl: it takes an expression as
an argument, checks whether the expression is true or false
(that's the part where it takes any value and does a .Bool on
it - by itself - and then looks at the result), and then, if
it was true, the "if" statement runs another part of the code.
So:

    if 'h:/'.IO.d {
        say 'It is a directory!';
    }

...will take the string 'h:/', the .IO method will convert it to
a path, the .d method will check whether the path corresponds to
a valid directory at this moment, and then the "if" statement will
check the result of this whole thing and decide whether to run
the { say... } block. If the path is a directory, it will tell you
that it is a directory. If the expression is true, it runs the code.

The postfix "if" also works in pretty much the same way as in Perl:
it allows you to shorten this:

    if 'h:/'.IO.d {
        say 'It is a directory!';
    }

...to this:

    say 'It is a directory!' if 'h:/'.IO.d;

Now you will note that in my example I did *not* write
"say if 'h:/'.IO.d", because I did not expect the "if" to return
a value; I wrote "say 'foo' if 'h:/'.IO.d" since I expected the "if"
statement to make Raku check whether 'h:/'.IO.d returns something that
looks like truth and, if it does, to execute the "say 'foo'" part.

I'm sorry, I assumed that you were familiar with the postfix "if" form
(something if something-else). Maybe you did not recognize it as such,
sorry.

As an exercise for the reader: once the above sinks in, what exactly
will "say if 'h:/'.IO.d" do? :)

G'luck,
Peter

-- 
Peter Pentchev  r...@ringlet.net r...@debian.org p...@storpool.com
PGP key:        http://people.FreeBSD.org/~roam/roam.key.asc
Key fingerprint 2EE7 A7A5 17FC 124C F115  C354 651E EFB0 2527 DF13

Attachment: signature.asc
Description: PGP signature

Reply via email to