Hi Luis, Thank you for your help on both this and the “clump” issue.
NiceSlice got changed (as a default) from the simpler but non-string-aware Filter::Util::Call implementation (which would mangle eg SQL strings in the code) to the string-aware but imperfect in other ways Filter::Simple implementation in 2.063_04. You can set the environment variable “PDL_NICESLICE_ENGINE” to Filter::Util::Call to use that, the previous default. Filter::Simple uses Text::Balanced, which got some sizable updates from me to improve its parsing of Perl code, but still makes some mistakes, as you can see. It works by finding all strings, comments, here-docs, and regexes, and removes them from the code before filtering, then puts them back after. The mistake here is that it misidentifies the text “$x/2/3” as having a regex in the middle, which gets removed from the “code” as you see. Similarly, Karl’s code which has “$y / (multi lines of stuff) / (other stuff)” is being misidentified as the “y /(multi lines)/” being a regex. Therefore it doesn’t go through the filter, therefore it retains its non-correct Perl status, and Perl gives a syntax error. A workaround is to avoid $y as a variable name, and possibly $x as well (since “x” is an operator and may throw off the parsing, for now). I will look at updating T:B to make it behave correctly in these cases, but that won’t happen today I’m afraid. NiceSlice continues to cause me agony out of all proportion to how “nice” it actually is. It’s a pity Perl doesn’t have a properly hookable parser yet (at least to my knowledge). Best regards, Ed From: Luis Mochan<mailto:moc...@icf.unam.mx> Sent: 07 January 2024 02:46 To: Karl Glazebrook<mailto:karlglazebr...@mac.com> Cc: perldl<mailto:pdl-general@lists.sourceforge.net> Subject: Re: [Pdl-general] Changes I noted PDL2.025 -> PDL2.084 - PDL::NiceSlice issue I found some time back problems with NiceSlice. Actually, with Filter::Simple (used by default by NiceSlice, though it can use other options, controlled with environment variables). I vaguely recall that two slashes, as in two divisions consecutive, confuse it completely, as they seem as regular expression. I found this in my notes of 2022-11-05: ------- Make a filter: package MyFilter; use v5.36; use Filter::Simple; FILTER_ONLY code_no_comments => sub { say "Code:\n$_" }, all => sub { say "All:\n$_" }; 1; And a program: use v5.36; use lib "."; use MyFilter; my $x=1; say $x/2/3; Execution yields: Code: my $x=1; say $x3; All: my $x=1; say $x/2/3; 0.166666666666667 This means that /2/ is removed incorrectly. The name of the variable ($x and not $y) seems important. ----------- Regards, Luis On Sun, Jan 07, 2024 at 12:01:27PM +1100, Karl Glazebrook via pdl-general wrote: > > > > On 7 Jan 2024, at 11:55 am, Karl Glazebrook via pdl-general > > <pdl-general@lists.sourceforge.net> wrote: > > > > (The mismatch of line numbers seems to be related to the use of hereto text > > earlier in the code, the debugger shows different line numbers) > > > > > PS just to prove this point given the line numbers issue: > > > > > syntax error at /Users/karl/Software/perl/KGB/Redshift.pm line 251, near > "$FOO(" > Execution of /Users/karl/Software/perl/KGB/Redshift.pm aborted due to > compilation errors. > > > > You can see FOO triggers a compilation error and BAR does not, use > PDL::NiceSlice is way at the top of the module > > Karl > > _______________________________________________ > pdl-general mailing list > pdl-general@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/pdl-general -- o W. Luis Mochán, | tel:(52)(777)329-1734 /<(*) Instituto de Ciencias Físicas, UNAM | fax:(52)(777)317-5388 `>/ /\ Av. Universidad s/n CP 62210 | (*)/\/ \ Cuernavaca, Morelos, México | moc...@fis.unam.mx /\_/\__/ GPG: 791EB9EB, C949 3F81 6D9B 1191 9A16 C2DF 5F0A C52B 791E B9EB _______________________________________________ pdl-general mailing list pdl-general@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/pdl-general
_______________________________________________ pdl-general mailing list pdl-general@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/pdl-general