On 4/2/25 8:22 AM, Bruce Gray wrote:

my $CommandLine = CommandLineClass.new{
   help           => False,
   debug          => False,
   UNC_BackupPath => Q[\\192.168.240.10\MyDocsBackup\backup1],
   rotates        => 2,
   ParentDir      => "/"
};

The problem is with the syntax of the `new`.
You need parenthesis instead of curly braces.
With that change, your code works as expected.

And I have it right on every other .new in my code.
Even my keeper how to has it right.  Mumble, Mumble.

Question: should the compiler have caught this?  Or
is there some other purpose for the .new{} syntax?


For even DRYer code, you can flatten `%opts` directly into the `new` constructor, like so:     # use lib 'C:/NtUtil', 'C:/NtUtil/p6lib';   # use this one on customer machines
     use Getopt::Long;
     class CommandLineClass is rw {
         has Bool $.help           = False;
         has Bool $.debug          = False;
        has Str  $.UNC_BackupPath = Q[\ \192.168.240.10\MyDocsBackup\backup1];
         has Int  $.rotates        = 2;
         has      $.ParentDir      = '/';
     }
    my %opts = get-options( 'help', 'debug', 'UNC_BackupPath=s', 'rotates=i', 'ParentDir=s' ).hash;
     my CommandLineClass $CommandLine .= new( |%opts );
     say $CommandLine.raku if $CommandLine.debug;

Sweet!


--
Hope this helps,
Bruce Gray (Util of PerlMonks)


Very much so!  Thank you!

Reply via email to