Thank you, Richard!
I was looking for the Raku equivalent of Perl's: `__DATA__`. Thanks to you I know now, it is: `=finish` (in/from Raku's POD6 Specification). Best Regards, Bill. PS Now, if we could just get brian d foy to blog about "Stupid `=finish` Tricks" !! https://www.perl.com/article/stupid-data-tricks/ On Mon, Jun 19, 2023 at 7:39 AM Richard Hainsworth <rnhainswo...@gmail.com> wrote: > HI Todd, > > Some more clean up: > On 19/06/2023 12:41, ToddAndMargo via perl6-users wrote: > <snip> > > > This is my test program: > > <RegexTest.pl6> > #!/bin/raku > > print "\n"; > my Str $x = Q[<a > href="wike-2.0.1-1.fc38.noarch.rpm">wike-2.0.1-1.fc38.noarch.rpm</a> > 27-Apr-2023 01:53 143K] ~ > Q[<a > href="wine-8.6-1.fc38.i686.rpm">wine-8.6-1.fc38.i686.rpm</a> 19-Apr-2023 > 21:48 11K] ~ > Q[<a > href="wine-8.6-1.fc38.x86_64.rpm">wine-8.6-1.fc38.x86_64.rpm</a> > 19-Apr-2023 21:48 11K] ~ > Q[<a > href="wine-alsa-8.6-1.fc38.i686.rpm">wine-alsa-8.6-1.fc38.i686.rpm</a> > 19-Apr-2023 21:48 223K]; > > $x~~m:i/ .*? ("wine") (.*?) $(Q[">] ) .*? $( Q[a href="] ) (.*?) ( > $(Q[">] ) ) /; > > print "0 = <$0>\n1 = <$1>\n2 = <$2>\n\n"; > > my Str $y = $0 ~ $1 ~ " " ~ $2; > print "$y\n\n"; > </RegexTest.pl6> > > > $ RegexTest.pl6 > > 0 = <wine> > 1 = <-8.6-1.fc38.i686.rpm> > 2 = <wine-8.6-1.fc38.x86_64.rpm> > > wine-8.6-1.fc38.i686.rpm wine-8.6-1.fc38.x86_64.rpm > > <snip> > > After Joseph's help: > $SysRev = $WebPage; > $SysRev~~m:i/ .*? ("wine") (.*?) $(Q[">] ) .*? $( Q[a href="] > ) (.*?) ( $(Q[">] ) ) /; > $SysRev = $0 ~ $1 ~ " " ~ $2; > > > maybe the following would be a bit more Raku-ish > > [in file called todd-test.raku] > > $=finish ~~ /:i [ 'href="' ~ \" $<ww> = ( 'wine-' \d .+? ) .*? ]+ $ /;say > $/<ww>.join(' '); > =finish<a > href="wike-2.0.1-1.fc38.noarch.rpm">wike-2.0.1-1.fc38.noarch.rpm</a> > 27-Apr-2023 01:53 143K > <a href="wine-8.6-1.fc38.i686.rpm">wine-8.6-1.fc38.i686.rpm</a> 19-Apr-2023 > 21:48 11K > <a href="wine-8.6-1.fc38.x86_64.rpm">wine-8.6-1.fc38.x86_64.rpm</a> > 19-Apr-2023 21:48 11K > <a href="wine-alsa-8.6-1.fc38.i686.rpm">wine-alsa-8.6-1.fc38.i686.rpm</a> > 19-Apr-2023 21:48 223K > > [end of todd-test.raku] > Test it in a terminal: > > $ raku todd-test.raku > wine-8.6-1.fc38.i686.rpm wine-8.6-1.fc38.x86_64.rpm > > Some comments. > 1) `=finish` is an undocumented part of the POD6 specification (I only > discovered it recently). It will be documented soon. > Anything after `=finish` is put in string that can be pulled into a Raku > program with `$=finish` (also undocumented) > `=finish` was introduced instead of Perl's `__DATA__`. > It is useful, because if you have alot of text to be experimented on, just > attach the text to the bottom of the program after a =finish > 2) `~~` does not need a `m` (you only need 'm' if you want to associated a > regex with the topic, eg. $_) > 3) the / 'begin' ~ 'end' 'regex' / syntax means match the regex between > 'begin' and 'end'. > 4) The final output has a 'wine' in it, so why search for it separately? Just > include it in the search. > 5) You seem to be looking for a 'wine-' followed by a digit, so as to > eliminate the 'wine-alsa-' line, so look for that > 6) '$<ww>=' places the match into $/<ww> of the whole match. Multiple matches > create an array. > 7) `$/<ww>.join` takes an array and joins it with a separator. > 8) In the original code, all the $() and Q[] add noise without any > disambiguation. > > But then we want to pull out interesting bits and we are not interested in > the rest. So `comb` is better. > > [start of test-2.raku] > > $=finish.comb(/ <?after \">'wine-' \d .+? <?before \"> /).join(' ').say; > =finish<a > href="wike-2.0.1-1.fc38.noarch.rpm">wike-2.0.1-1.fc38.noarch.rpm</a> > 27-Apr-2023 01:53 143K > <a href="wine-8.6-1.fc38.i686.rpm">wine-8.6-1.fc38.i686.rpm</a> 19-Apr-2023 > 21:48 11K > <a href="wine-8.6-1.fc38.x86_64.rpm">wine-8.6-1.fc38.x86_64.rpm</a> > 19-Apr-2023 21:48 11K > <a href="wine-alsa-8.6-1.fc38.i686.rpm">wine-alsa-8.6-1.fc38.i686.rpm</a> > 19-Apr-2023 21:48 223K > > [end of test-2.raku] > > > Same output. > > Notes: > 1) comb looks for all matches in a string, so no need for the repeat and end > of line in the regex > 2) We are looking for something 'after' a 「"」 and 'before' a second 「"」, and > so we can use the <?after regex> and <?before regex> zero-width matchers. > > Richard, aka finanalyst > >