At the moment the file test operators that I expect to return true or
false do, but the true is the filename. I expected a boolean, for no
other reason than Perl 6 has them so it might as well use them. The
section on Smart Matching in S03 says that the ~~ doesn't have to
return a boolean,  but aside from things liek :s, :M, and :A, what good
would it be not to? I'm happy to update S16 with whatever the answer
is. :)


Here's my code example that motivates this question. For a Llama6
exercise with file test operators, I wanted to create a little table:

   for @files -> $file {
      printf "%-70s  %s  %s  %s\n",
         $file,
         $file ~~ :r,
         $file ~~ :w,
         $file ~~ :x;      
      }

I get the filename for each part:

   foo                   foo  foo  

Which I wanted to work like this perl5 (not that I care if it's
different, I just have to explain it to reader)

   #!/usr/bin/perl5
   foreach ( glob( "*" ) )
      {
      printf "%30s %s %s %s\n", $_, -r, -w, -x
      }


With the Pugs 6.2.13 (r15868), only the ~~ form seems to work, but is
that going to be any different than the other two forms?




pugs> ( "Talks" ~~ :r ).say
Talks
Bool::True
pugs> ( "Talks" ~~ :d ).say
Talks
Bool::True

pugs> "Talks".TEST(:s).say
*** No such method in class Str: &TEST
    at <interactive> line 1, column 1-21

pugs> "Talks".:s
Internal error while running expression:
*** 
    Unexpected ":s"
    expecting ".", "\187", ">>", "=", operator name, qualified
identifier, variable name, "...", "--", "++", "i", array subscript,
hash subscript or code subscript    at <interactive> line 1, column 9
pugs> "Talks".":d"
Internal error while running expression:
*** 
    Unexpected "\":"
    expecting ".", "\187", ">>", "=", operator name, qualified
identifier, variable name, "...", "--", "++", "i", array subscript,
hash subscript or code subscript    at <interactive> line 1, column 9

Reply via email to