On Oct 25, 2025, at 05:19, ToddAndMargo via perl6-users <perl6-
[email protected]> wrote:
Hi All,
What am I doing wrong here:
[2] > my Str $x = "1.40.564"; $x~~s:i/ '.' $$ .* //; print "$x\n";
1.40.564
I am after "1.40"
This is my work around, but I'd really like to know
how to do it right:
my Str $x = "1.40.564"; $x~~m:i/ ( .*? '.') (.*? ) '.' /; print "$0$1\n";
1.40
Your in confusion,
-T
On 10/25/25 8:06 AM, William Michels wrote:
> [0] > my $x = "1.40.564"; $x = $x ~~ m/ ^ <-[.]>+ "." <-[.]>+ /; say
~$x;
> 1.40
> [0] > my $x = "1.40.564"; $x = $x.match(/ ^ <-[.]>+ "." <-[.]>+ /); say
> ~$x;
> 1.40
>
> #OR
>
> [1] > my $x = "1.40.564"; $x = S/ "." <-[.]>+ $ // given $x; say $x;
> 1.40
> [1] > my $x = "1.40.564"; $x = $x.subst(/ "." <-[.]>+ $ /, "" ); say $x;
> 1.40
>
> One issue with your code was failing to create a `<-[.]>` enumerated
> character class.
> This (negated) `<-[.]>` class consists of all characters other than `.`
> dot (i.e. period).
>
> Now read the regexes above:
> 1. The first two matching expressions look for "start-of-string,
> non-dot characters, a dot, then more non-dot characters".
> 2. The last two substitution expressions look for "a dot, non-dot
> characters, then end-of-string".
>
> HTH, Bill.
>
Hi Bill,
Thank you. It does!
It also tells me that the easiest way way actually the "m'
work around I came up with and that I have no understanding
of $$ and ^^ in regexes. So I have some work to do.
-T