perl.perl5.porters https://www.nntp.perl.org/group/perl.perl5.porters/ ... Copyright 1998-2025 perl.org Thu, 31 Jul 2025 09:14:49 +0000 [email protected] Re: Magic v2 - Review for Merge and next steps by Leon Timmermans On Mon, Jul 21, 2025 at 7:51&acirc;&#128;&macr;AM Ovid &lt;[email protected]&gt; wrote: <br/>&gt; <br/>&gt; On Sun, Jul 20, 2025 at 3:11&acirc;&#128;&macr;PM Leon Timmermans &lt;[email protected]&gt; wrote: <br/>&gt;&gt; <br/>&gt;&gt; &gt;&gt; I don&#39;t think it&#39;s quite clear why we would want value hooks. <br/>&gt; <br/>&gt; &lt;snip&gt; <br/>&gt;&gt; <br/>&gt;&gt; Value magic as an annotation sounds useful and has precedent (e.g. vstrings). <br/>&gt; <br/>&gt; &lt;snip&gt; <br/>&gt;&gt;&gt; <br/>&gt;&gt;&gt; I think that [COW would] require an unholy amount of backreferences to <br/>&gt;&gt;&gt; everything that owns a reference to the current value. <br/>&gt; <br/>&gt; &lt;snip&gt; <br/>&gt;&gt;&gt; <br/>&gt;&gt;&gt; How would [not printing sensivive information] work? ... <br/>&gt; <br/>&gt; &lt;snip&gt; <br/>&gt; <br/>&gt; I think this is getting into implementation details, which is great, but your original concern was &quot;I don&#39;t think it&#39;s quite clear why we would want value hooks.&quot; That&#39;s the question I was trying to answer. <br/> <br/>Fair point, my apologies. <br/> <br/>Leon <br/> https://www.nntp.perl.org/group/perl.perl5.porters/2025/07/msg270149.html Wed, 30 Jul 2025 23:55:35 +0000 Re: no 'declaration after statement' error by bulk 88 Dave Mitchell wrote: <br/>&gt; In the context of updating perlxs.pod, I wanted to find which version of <br/>&gt; perl stopped requiring that all C variable declarations come before <br/>&gt; statements. So I wrote a short &#39;bad&#39; XSUB and tested it against older <br/>&gt; perls, expecting it to give a C compiler error; but it worked back to at <br/>&gt; least perl 5.8.9. I&#39;m probably doing something obviously wrong, but I <br/>&gt; can&#39;t see why. <br/>&gt; <br/>&gt; My two questions are: <br/>&gt; <br/>&gt; 1) Which perl release relaxed this restriction? <br/>&gt; <br/>&gt; 2) Why doesn&#39;t this XSUB give a C compiler error on older perls: <br/>&gt; <br/>&gt; void <br/>&gt; foo(int i = 0) <br/>&gt; CODE: <br/>&gt; int j = 0; <br/> <br/>Get a copy of Visual C or aCC. FSF/GNU don&#39;t own the intellectual property rights to C. <br/> <br/>In theory GCC can be commanded with a cmd line option to stop uses its GNU flavored C dialect. But I GCC impossible to use when its forced into ISO C mode. I find no legacy SW works with that run mode of GCC. None of my private SW works with GCC in ISO C mode, and nothing from CPAN works unmodified with GCC in ISO C mode. Its similar or more of a disaster than sending &quot;C23&quot; or &quot;C99&quot; or &quot;C89&quot; files into a C++ compiler. <br/> <br/>If you PORT that C89-C23 CPAN XS lib to GCC in ISO mode, and leave the cmd line args inside your Makefile.PL, then yes GCC is an excellent way to validate that Visual C will compile your module from a Linux env. But no unmodified src code ever works with GCC ISO C mode. <br/> <br/>Its not worth my time to spend 30 minutes coding+30 minutes ticket bureaucracy per CPAN tarball over and over again to get all of CPAN compatible with GCC ISO C mode. <br/> <br/>Its a coin toss for me time wise if I want to port a CPAN .c/.xs to Strawberry GCC in ISO C mode, or start a Linux VM and transfer files. YMMV. <br/> <br/>-DUSE_CPLUSPLUS fails 50% of CPAN tarballs IME. GCC in ISO C is worse since its the only reference unit test framework for the ISO C TC, and Clang/LLVM need GCC in ISO C to be strict enough to be the CI framework for Clang since there would be no other way to cross check the spec against the compiler (COUGH COUGH PERL 5). <br/> <br/> GCC ISO C mode is a useful tool, but its exact settings doesn&#39;t represent any other known Windows or Commercial Unix C compiler for unmodified source code compatibility verification. But you get a guarantee your .c will work on VC and all legacy Commercial Unix CCs you never heard of. <br/> https://www.nntp.perl.org/group/perl.perl5.porters/2025/07/msg270148.html Wed, 30 Jul 2025 22:39:23 +0000 Re: Magic v2 - Review for Merge and next steps by bulk 88 Leon Timmermans wrote:&gt; It does point out an important challenge with the idea of value magic: <br/>&gt; our current set magic is *after* the assignment (which makes sense for <br/>&gt; variable magic), but value magic generally wants it to happen *before* <br/>&gt; the assignment. This alone would mean a vast amount of change in the <br/>&gt; codebase (various places that set SVs). <br/> <br/>This is just a speed question. <br/> <br/>If a MG* consumer was negligent to save a copy of SvPVX into mg-&gt;mg_ptr during the last GMG event sent to it, why would it be the interp&#39;s problem if contents inside SvPVX got nuked between the GMG event and SMG event? <br/> <br/>If you single step TIEHASH and TIEARRAY, you will see they reversed the GMG, nuke SvPVX(), SMG, design pattern. <br/> <br/>And created more Newx() blocks and mortal SV* heads vs the number of fingers I have for a single &quot;my $zipcode = $hash-&gt;{zipcode};&quot; statement. <br/> <br/>&gt;&gt; Or maybe we could declare some values as immutable, without having to use constants? Here are a couple of examples that are annoying: <br/>&gt;&gt; <br/>&gt;&gt; use Readonly; <br/>&gt;&gt; use Hash::Util qw(lock_hash); <br/>&gt;&gt; <br/>&gt;&gt; Readonly my $x =&gt; &quot;hello&quot;; <br/>&gt;&gt; my $y = $x; # $y is NOT read-only, infection doesn&#39;t happen <br/>&gt;&gt; <br/>&gt;&gt; my %h = (a =&gt; 1, b =&gt; 2); <br/>&gt;&gt; lock_hash(%h); <br/>&gt;&gt; my %copy = %h; # %copy is a regular hash, not locked <br/>&gt; <br/>&gt; I suspect that would fundamentally break the language. What should this do? <br/> <br/>This makes no sense in Perl. A Perl $scalar can&#39;t be a copy paste of JavaScript&#39;s Object() class or String() class. A Perl $scalar is JavaScript&#39;s https://developer.mozilla.org/en-US/docs/Glossary/Primitive . JS&#39;s primitives are POD, you never need to write a try{}/catch{} around them. If they quack like a duck, they are a duck. <br/> <br/>In JS the = operator usually does, and the .toString()/.toNumber()/.toValue() calls must strip dynamic-ism from the value. Value infection is supposed to be a C level secret. Its not the next BlockChain CryptoCurreny IDL SV VC startup. <br/> <br/>There are enough of them already https://en.wikipedia.org/wiki/Interface_description_language <br/> <br/>Perl has enough of them already https://metacpan.org/pod/Moose <br/> <br/>Value infection is some kind of invisible &quot;tag&quot; set on a C level, and at some point later on some C code (XSUB/PPSUB/Perl&#39;s &amp; sigil) can retrieve that invisible &quot;tag&quot; to separate 2 different SV*s addrs with identical contents. <br/> <br/>Value infection is how nodeJS/JavaScript can automatically close your Unix FD or Unix socket when the last Pure JS reference falls out of scope, even though the ECMAScript spec forbids adding Perl&#39;s sub DESTROY {}. sub DESTROY {} definitely exists inside FireFox/SpiderMonkey on the JS-XS level. You are just simple prohibited from setting that C struct member from JS code. <br/> <br/>If JavaScript didn&#39;t have a sub DESTROY {}, nodeJS and Deno and Bun would be unusable because you&#39;d have to call libc&#39;s &quot;free(ptr);&quot; symbol manually everywhere. Javascript&#39;s mark and sweep algorithm runs randomly and unpredictably. I&#39;ve read its either 300 millisecond wall clock timer running 24/7, but thats obsolete &gt;= 2010 according to some blogs. The post-2010 algorithm is 30% or 70% of all physical memory according to the OS kernel&#39;s metrics. That can be 36 milliseconds away, 36 minutes away, or 36 days away. STDIO FDs/Unix FDs are value magic/value tag infection/sub DESTROY {}, along with Perl&#39;s SAVETMPS/FREETMPS/pp_nextstate fn ptr. <br/> <br/>SpiderMonkey simply doesn&#39;t call SAVETMPS until you pass a an tag infected &quot;POD&quot; value through &quot;=&quot;. The SM SAVETMPS also has to now de-optimize and swap the function pointer for pp_nextstate from the NOOP version to the heavyweight Perl version until the next scope leave so that the RC LL is flushed instantly, and not 36 hours from now, and the sub DESTROY{} gets fired on the C level that you don&#39;t know about. <br/> <br/>Also Perl should stop using the words Mortal and Mortalize. The correct API terms to use are Rooted and Rooter. <br/> <br/>C code using Value infection also has to be fault tolerant to get Value infection stripped. Value infection can&#39;t be a replace for Digital Rights Management libraries or the ultimate SW fix for https://en.wikipedia.org/wiki/Analog_hole <br/> <br/>Good or best practices Perl code won&#39;t strip the infectious Value tag. Mediocre and student Perl code will instantly strip the infectious Value tag, and whatever was the producer/consumer library that made that tag has to tolerate those accidents happening. <br/> <br/> <br/>&gt; my %a <br/>&gt; my %b : Readonly = (a =&gt; 1, b =&gt; 2); <br/>&gt; %a = %b; <br/>&gt; %a = (); <br/>&gt; <br/>&gt;&gt; Or someone tries to print a password or PII and it&#39;s printed as [Redacted]? Also, lots of debugging opportunities here. <br/> <br/>Stripping Value infection tag logic can never lead to a CVE/heap corruption/SEGVs if there is an accidental stripping. <br/> <br/>&gt;&gt; Readonly my $x =&gt; &quot;hello&quot;; <br/>&gt;&gt; my $y = $x; # $y is NOT read-only, infection doesn&#39;t happen <br/> <br/>If this worked as written, &quot;$y = 1;&quot; represents a croak(PL_no_modify); or a SEGV. And this: <br/> <br/> eval(&quot;\$z = &#39;$y&#39;;&quot;); <br/> <br/>Must flawlessly represent a croak(PL_no_modify); or a SEGV. Nothing else. <br/> <br/> my $y = $x; <br/> my $z; <br/> $SIG{__DIE__) = sub { <br/> warn &#39;inside the trap frame: probe=&#39;.$z.&#39; err=&#39;.$@.&quot;\n&quot;; <br/> $logger-&gt;WriteException(Carp::longmess(), $y, $z, $@, $!); <br/> }; <br/> eval { <br/> $z = $y; <br/> $z = 1; <br/> }; <br/> <br/>This also has to be removed from the Perl syntax because this is now a security exploit according to some InfoSec SME on X. <br/>&gt; How would that work? As an annotation that print specifically looks <br/>&gt; for? How would it work if someone appends that password to another <br/>&gt; string first? <br/> <br/>use ---; <br/>--- my $x =&gt; &quot;hello&quot;; <br/> <br/>is a great idea for TPC talk if someone uploads that module to CPAN. <br/> https://www.nntp.perl.org/group/perl.perl5.porters/2025/07/msg270147.html Wed, 30 Jul 2025 21:51:45 +0000 Re: Magic v2 - Review for Merge and next steps by bulk 88 Paul &quot;LeoNerd&quot; Evans wrote:&gt; TL;DR: Please help review my &quot;magic v2&quot; so far so I can add more useful <br/>&gt; abilities that will provide a good foundation for implementing a <br/>&gt; whole bunch of features on top of. <br/>&gt; <br/>&gt; I have a slowly-growing collection of ideas and partial experiments, <br/>&gt; some of which are written up in PPC documents, that all involve adding <br/>&gt; extra features, extra abilities, that would be useful in various <br/>&gt; situations. A lot of these are partly stalled for want of a decent way <br/>&gt; to encapsulate &quot;extension behaviour&quot;. For example, a module or core <br/>&gt; feature that wanted to provide an attribute for subroutine signature <br/>&gt; parameters will need some way to provide extra code that may be <br/>&gt; required at various points during compilation or runtime. <br/>If strategic goals are the purpose, or 1 API that is forever flexible for everyone. I have to ask, what are the design requirements and what use cases are specifically excluded from the proposed design? <br/> <br/>Who is the intended customer of Magic v2? <br/> <br/>P5P to P5P, P5P to CPAN XS, or P5P to PP users or CPAN XS vs CPAN XS (3P to 3P)? <br/> <br/>Who or what group will coordinate and write interface specs for the producer and consumer? Producer and consumer are 2 different independent authors or maintainers. <br/> <br/>Do producers need get a GUID/namespace from P5P to bless/announce their magic v2 class? Everyone knows the current system ran out of lower ASCII printable chars to use as class names or base class names. <br/> <br/>#define PERL_MAGIC_uvar &#39;U&#39; /* Available for use by extensions */ <br/>#define PERL_MAGIC_uvar_elem &#39;u&#39; /* Reserved for use by extensions */ <br/>#define PERL_MAGIC_tied &#39;P&#39; /* Tied array or hash */ <br/>#define PERL_MAGIC_tiedelem &#39;p&#39; /* Tied array or hash element */ <br/>#define PERL_MAGIC_tiedscalar &#39;q&#39; /* Tied scalar or handle */ <br/>#define PERL_MAGIC_extvalue &#39;^&#39; /* Value magic available for use by extensions */ <br/>#define PERL_MAGIC_ext &#39;~&#39; /* Variable magic available for use by extensions */ <br/> <br/>Only 7 classes or &quot;interfaces&quot; were reserved for end users. <br/> <br/>The ptr to vtable trick allows finding out the class name/producer name for an unknown MG*, but it is currently impossible to find out, what interface is the producer. Yes, many TIMTOWTDI 1-off tricks exist for a dispatcher or consumer to find out what features/base class, this producer class is offering to the interp, or to PP, or to other CPAN XS code. U16 mg_private, or magic or sentinel SV* addrs, or magic void *s. The MAGIC struct has 2.5-3.25 void *s of dynamic data storage in it. <br/> <br/>struct magic { <br/> MAGIC* mg_moremagic; <br/> MGVTBL* mg_virtual; <br/> U16 mg_private; <br/> char mg_type; <br/> U8 mg_flags; <br/> SSize_t mg_len; <br/> SV* mg_obj; <br/> char* mg_ptr; <br/>}; <br/> <br/>I&#39;ve never done it, and I&#39;ve never seen anyone do this. MAGIC struct becomes 4 void *s of data storage, if there are extra const void *s hidden before or after the first 5 or 8 official fn ptrs, of the end user controlled MGVTBL* mg_virtual ptr. <br/>&gt; I have a bunch of existing modules that try to do variations on this <br/>&gt; kind of idea, by providing some sort of C-level data structure <br/>&gt; definition that extension modules can provide into the base system, to <br/>&gt; contain those extensions. There&#39;s a converging design among many of <br/>&gt; these, that it&#39;d be most handy to have a data structure that contains <br/>&gt; function pointers, each of which is run at a particular phase of <br/>&gt; operation. These structures then define a kind of behaviour, provided <br/>&gt; by a module, that can be attached to various target instances. <br/>Who dictates/specs out the behavior? <br/> <br/>How many behaviors can there be in a perl process? <br/> <br/>does the interp need to be recompiled? <br/> <br/>or wait 1 year until the next stable release to &quot;get a new behavior&quot;? <br/> <br/>can new behaviors be &quot;backported&quot; to stale/out of date interp versions? <br/> <br/>can someone backport a new behavior from Perl 5.48 to Perl 5.46 and publish it on CPAN? <br/> <br/>can 1 producer obj announce 2 behaviors? <br/> <br/>or there must be 2 producer objs created by the same class factory (CPAN module)? <br/> <br/>Can 1 data variable (SV*, AV*, HV*, or CV*) have 2 or more producers for same interface or same behavior attached to it simultaneously? AKA hooking. <br/> <br/>Can producer objs legally (design-wise/API docs-wise, not real life) see how many other producer objs are nested/stacked above and below themselves on the linked list? A.K.A. caller() or PadWalker or @ISA. <br/> <br/>Or is it that prohibited by API docs from day 1? <br/>&gt; In many ways this sounds exactly like Perl&#39;s &quot;MAGIC&quot;. MAGIC is useful <br/>&gt; for adding trigger options to scalar variables, but has some <br/>&gt; shortcomings when trying to apply it to other situations. Perl core <br/>&gt; does attempt with some limited success to reuse the same magic virtual <br/>&gt; table definition on non-scalars (i.e. arrays, hashes and subroutines), <br/>&gt; but this is of limited utility. Furthermore, there&#39;s no ability to <br/>&gt; create kinds of magic that attach to the semantic idea of a &quot;value&quot;, <br/>&gt; and follow it around as it gets copied and assigned to various other <br/>&gt; scalars. <br/>Perl has this already <br/> <br/>https://perldoc.perl.org/overload#Mathemagic,-Mutators,-and-Copy-Constructors <br/> <br/>but overload.pm is as cool as smoking cigarettes with Joe Camel post year 2000. IDK why Perl Ecosystem/end users hate overload.pm with a passion. <br/> <br/> <br/>&gt; The reason that existing magic is rather limited in ability is because <br/>&gt; the entire set of behaviours provided by a kind of magic are <br/>&gt; encapsulated in a bunch of functions whose addresses are given in <br/>&gt; pointers in the &quot;Magic virtual table&quot; structure (MGVTBL), but that <br/>&gt; virtual table doesn&#39;t have any other fields to store metadata of any <br/>&gt; kind. It defines a fixed set of 8 different functions for various <br/>&gt; scalar-variable related scenarios, and makes it difficult to extend to <br/>&gt; other situations, as would apply to arrays, hashes, or other things. <br/>Yep, no versioning, no length member at the top, no GUID at the top, what little versioning there was inside U8 mg_flags ran out very quick. <br/> <br/>The current function pointers inside MGVTBL can be reworked, there is just no buy-in from anyone. <br/> <br/>struct mgvtbl { <br/> int (*svt_get) (pTHX_ SV *sv, MAGIC* mg); <br/> int (*svt_set) (pTHX_ SV *sv, MAGIC* mg); <br/> U32 (*svt_len) (pTHX_ SV *sv, MAGIC* mg); <br/> int (*svt_clear) (pTHX_ SV *sv, MAGIC* mg); <br/> int (*svt_free) (pTHX_ SV *sv, MAGIC* mg); <br/> int (*svt_copy) (pTHX_ SV *sv, MAGIC* mg, <br/> SV *nsv, const char *name, I32 namlen); <br/> int (*svt_dup) (pTHX_ MAGIC *mg, CLONE_PARAMS *param); <br/> int (*svt_local)(pTHX_ SV *nsv, MAGIC *mg); <br/>}; <br/> <br/>Fn ptrs svt_len, svt_clear, and svt_copy, are dead code basically. They serve no purpose for $SCALARS, and svt_len, svt_clear, and svt_copy are exclusive to aggregates like TIEARRAY/TIEHASH, and PP&#39;s tie()&#39;s API for TIEARRAY/TIEHASH is UNREACHABLE from XS. <br/> <br/>https://github.com/Perl/perl5/blob/blead/hv.c#L3051 <br/>https://github.com/Perl/perl5/blob/9ef5300f9a0c33a7b865a307d84e06ada598c612/mg.c#L2280 <br/>https://github.com/Perl/perl5/blob/9ef5300f9a0c33a7b865a307d84e06ada598c612/mg.c#L2286 <br/>https://github.com/Perl/perl5/blob/9ef5300f9a0c33a7b865a307d84e06ada598c612/mg.c#L2106 <br/>https://github.com/Perl/perl5/blob/9ef5300f9a0c33a7b865a307d84e06ada598c612/mg.c#L2147 <br/> <br/>Don&#39;t have a CV*? Don&#39;t have a GV*? no HV* stash? <br/> <br/>Tough luck. TIEHASH/TIEARRAY is a PP only API, C code is not allowed in. <br/> <br/>I could modify the current TIEARRAY/TIEHASH CV* based API to be as fast as a &quot;int(*svt_get)(pTHX_ SV *sv, MAGIC* mg);&quot; style API with no visible C level changes for CPAN XS modules if someone was interested. <br/> <br/>&gt; The main idea of my &quot;Magic v2&quot; redesign therefore is to extend the <br/>&gt; definition of this vtable, with a whole new structure shape that has <br/>&gt; metadata fields for what &quot;shape&quot; it is, a version number, some flags, <br/>&gt; etc... Various different &quot;shapes&quot; are then defined for various <br/>&gt; situations. There&#39;s a &quot;scalar variable&quot; shape that mostly matches the <br/>&gt; uses of existing magic, with plenty of space for other shapes to be <br/>&gt; added with different sets of function pointers. <br/>Are you using the word &quot;shapes&quot; the same way Chrome/Node use that word or a different meaning? <br/>&gt; Right now, I have this redesign in a branch that contains scalar, array <br/>&gt; and hash variable shapes, and a shape intended to apply to scalar <br/>&gt; *values*, with code around that tries to copy the magic attachment <br/>&gt; around when the value itself is copied. <br/>Even though SvROK()/overload.pm already enable what you are describing, would any Perl users have real or imaginary &quot;security&quot; concerns over viral values being added to Perl 5? <br/> <br/>I don&#39;t see any security concerns myself, but I can imagine some dissent over not being able to copy or serialize or &quot;strip&quot; the getter/setter methods away from the viral value, without round tripping it through JSON or a disk file. The complaints would be about whether viral values can see the my $vars of upper scopes with string eval, or that viral values can&#39;t be detected by a human developer using perl5db.pl&#39;s TUI interface. <br/> <br/>Nobody wants all the time stamp $scalars in their %{@{$logging}} array to keep going up after calling &quot; $start = time(); &quot; and the IV inside $start continues to tick 1x a second. <br/>&gt; Of these, the very last one - creating the concept of scalar value <br/>&gt; magic - still has a number of performance-related questions that have a <br/>&gt; measurable impact on the operation of the interpreter even in programs <br/>&gt; that do not make use of it. So that part at least isn&#39;t ready for <br/>&gt; consideration of merge into blead at this time. <br/>Why would it be a performance problem? there are only 2 places inside libperl to add that. newSVsv() and sv_setsv(). <br/> <br/>Is your performance problem actually the dozens or low 100s of places where the interp or XS does &quot; newSVpvn(SvPVX(old), SvCUR()); &quot; instead of &quot; newSVsv(old) &quot;? <br/> <br/>&gt; <br/>&gt; However, now that we can start considering things to look into bringing <br/>&gt; into development for (5.)43.1, I would like to propose the basic part <br/>&gt; of Magic v2 (the base mechanism with the ability to have different <br/>&gt; shapes), as well as the stable parts of scalar/array/hash variable <br/>&gt; magic. All of these are just neatened-up rewrites of existing <br/>&gt; behaviours, but made in a way as to allow a lot of extension in future. <br/>&gt; <br/>&gt; Once these parts are merged, we&#39;ll be in a much better place to consider <br/>&gt; ability to add magic in other situations around subroutines, sub <br/>&gt; signature parameters, object fields, and a whole bunch of other places. <br/>&gt; Several of these overlap some existing PPC documents I have open, and <br/>&gt; would be a good step towards implementing them, so there&#39;s a lot that <br/>&gt; can be built on top of it. <br/>&gt; <br/>&gt; Now that the next development cycle can start, I would like to begin <br/>&gt; with a review and discussion on the current set of code as it stands. It <br/>&gt; lives here on this branch, which I periodically rebase onto `blead`: <br/>&gt; <br/>&gt; https://github.com/leonerd/perl5/tree/hooks <br/>mg.h: <br/> <br/>enum HookShape { <br/> HKs_BASE, <br/> HKs_SCALARVAR, <br/> HKs_SCALARVALUE, <br/> HKs_ARRAYVAR, <br/> HKs_HASHVAR, <br/>}; <br/> <br/>How do you or future P5P devs EOL/retire 1 or 2 but not all 5 base class/interface from this V2 enum, when MAGIC v3 is created from MAGIC V2? <br/> <br/>This also means your implementation can&#39;t grow just like Perl_sv_magic() can&#39;t grow beyond 128-32. And 2 3rd party CPAN XS libs with 2 different author can&#39;t add their own types to the HookShape registry. <br/> <br/> <br/>/* common to all hook function structs */ <br/>#define _PERL_HOOKFUNCTIONS_COMMON_FIELDS \ <br/> MGVTBL _v1_vtbl; /* reserve space */ \ <br/> U32 ver; \ <br/> enum HookShape shape; \ <br/> U32 flags; \ <br/> const char *debug_name; \ <br/> size_t user_size; \ <br/> void (*free) (pTHX_ SV *sv, MAGIC *mg); \ <br/> void (*clone)(pTHX_ SV *osv, MAGIC *omg, SV *nsv, MAGIC *nmg, CLONE_PARAMS *params) <br/> <br/>are you going to drop out func ptr &quot;clone&quot; struct member on no thd perls? <br/> <br/>Why not declare these fn ptrs as varargs from day 1? <br/> <br/>That was a huge mistake Larry made with MAGIC V1 and the CV * prototypes. <br/> <br/>+static int <br/>+XS_SDBM_File_sdbm_DESTROY(ix, sp, items) <br/>+register int ix; <br/>+register int sp; <br/>+register int items; <br/>+{ <br/>+ if (items &lt; 1 || items &gt; 1) { <br/>+ croak(&quot;Usage: SDBM_File::DESTROY(db)&quot;); <br/>+ } <br/>+ { <br/>+ SDBM_File db; <br/>+ <br/>+ if (sv_isa(ST(1), &quot;SDBM_File&quot;)) <br/>+ db = (SDBM_File)(unsigned long)SvNV((SV*)SvANY(ST(1))); <br/>+ else <br/>+ croak(&quot;db is not of type SDBM_File&quot;); <br/>+ sdbm_close(db); <br/>+ } <br/>+ return sp; <br/>+} <br/> <br/>Actually it someone after Larry, got rid of Larry&#39;s original design, and made it worse by transporting dSP and dAXMARK in C global variables, instead of transporting them on the C stack/C&#39;s ABI CPU registers. <br/> <br/>Arg 3 items from Larrys design can be removed tho. Perl&#39;s I32 items, is inefficient on all 3 modern C compilers. <br/> <br/>83 CC 23 8B ADD X3, X4, W3,SXTW#3 &lt;&lt; 3 shift left ax to SV** <br/>42 00 03 CB SUB X2, X2, X3 SP - MARK <br/>42 FC 43 93 ASR X2, X2, #3 shift right &gt;&gt; 3 <br/>5F 04 00 71 CMP W2, #1 <br/>C1 0A 00 54 B.NE loc_20031C <br/> loc_20031C <br/>E2 0E 00 F0 ADRP X2, #Perl_croak_xs_usage_ptr@PAGE <br/>42 B0 45 F9 LDR X2, [X2,#Perl_croak_xs_usage_ptr@PAGEOFF] <br/>E0 03 01 AA MOV X0, X1 <br/>21 01 00 90 ADRP X1, #aLibref@PAGE ; &quot;libref&quot; <br/>21 00 25 91 ADD X1, X1, #aLibref@PAGEOFF ; &quot;libref&quot; <br/>40 00 3F D6 BLR X2 <br/> <br/> MGVTBL _v1_vtbl; /* reserve space */ \ 8 <br/> U32 ver; \4 <br/> enum HookShape shape; \4 <br/> U32 flags; \4 <br/> ALIGNMENT PROBLEM <br/> const char *debug_name; 8 <br/> <br/>I think I see 4 missing bytes in this struct. <br/> <br/> const char *debug_name; \ <br/> <br/>Bad idea for Perl. Okay idea for -DDEBUGGING Perl, but these 8 bytes are useless for production PP/XS apps. Only ChatGPT and Monkeys with Mice and Monitors can decrypt the data stored inside <br/>&quot;char *debug_name;&quot;. Field &quot;char *debug_name;&quot; should be a SV* or HV* or a ptr to a static RO or static RW C struct. <br/> <br/>&quot;char *debug_name;&quot; needs to be an analog of SV*&#39;s SvSTASH(), or be a C struct with much more broken down data. It needs to be machine readable. Basically &quot;char *debug_name;&quot; is how to programmatically find out which class/XS module created this MG V2 object. <br/> <br/>&quot;char *debug_name;&quot; is going to be as useless as GvFILE() or CvFILE() is right now. Unreachable from PP, and Devel::Peek&#39;s Dump() is the only user of the CvFILE() member in the Perl Ecosystem. <br/> <br/> size_t user_size; \ <br/> <br/>It can be turned into a U32 or U16 to fix the alignment problem. A 6 GBs long vtable is insane. <br/> <br/>typedef struct { <br/> MAGIC _magic; <br/> IV keyiv; <br/>} MAGICWithKeyIV; <br/> <br/>typedef struct { <br/> MAGIC _magic; <br/> SV *keysv; <br/>} MAGICWithKeySV; <br/> <br/>Why are keyiv and keysv on the bottom and not on the top? Type IV is larger than type SV* on all i386 Perls except Visual C Perl. <br/> <br/>I see a back-forwards compatibility problem here. <br/> <br/>You also aren&#39;t solving the alignment problem with <br/> <br/>struct magic { <br/> MAGIC* mg_moremagic; <br/> MGVTBL* mg_virtual; /* pointer to magic functions */ <br/> U16 mg_private; <br/> char mg_type; <br/> U8 mg_flags; <br/> SSize_t mg_len; <br/> SV* mg_obj; <br/> char* mg_ptr; <br/>}; <br/> <br/>This post is long enough. MAGIC V2 needs to follow the design of C++ getter/setter operator overload methods. Not repeat every single C level mistake that was done in Perl 5.000 Alpha 001. <br/> <br/>MAGIC V1 was not even whiteboard-ed as a public API for random CPAN C ppl to use. It was a private API between libperl.so and DBM_File.xs, NDBM_File.xs, ODBM_File.xs, GDBM_File.xs, SDBM_File.xs and Curses.xs after these 6 TUs/.c/.xs/.us files were kicked out of libperl.so and stopped being &quot;keywords with 2 :: characters&quot; and started being plugins. <br/> <br/>I only spent 2 hours reading the MAGIC V2 branch and stopped, but I see MAGIC V2 does nothing about call_sv()/&quot;TIESCALAR&quot; being 14x slower than writing: <br/> <br/> PUSHMARK(SP); <br/> CvXSUB(cv)(aTHX_ cv); <br/> <br/>All these problems need to be fixed for any MAGIC V2 attempt. <br/> <br/>The best practices are whatever Python/PHP/Ruby/Rust/Chrome/Firefox/Dalvik/Hotspot/CLR/C++ STL/ObjC/Swift are doing right now on the .i file level. <br/> <br/>MAGIC V1 currently looks like Windows 95 attempting to link C function written in i386 language to C function written in i286 language inside the same address space. Win95 never had access to DBT or https://en.wikipedia.org/wiki/Rosetta_(software) technology. https://www.nntp.perl.org/group/perl.perl5.porters/2025/07/msg270146.html Wed, 30 Jul 2025 20:07:32 +0000 Perl 5 Commit Summary by Perl 5 commit summary Perl 5 commit summary, activity since Saturday<br/><br/>Current branch blead<br/>26 commits. 5 unique authors. 4 unique committers.<br/>28 files changed, 803 insertions(+), 1144 deletions(-)<br/>Thanks, applied: Karl Williamson (1)<br/>Snapshot: http://github.com/Perl/perl5/tarball/e31d3ed5601e07f2<br/><br/> Change core-team email address for jkeenan<br/> James E Keenan 1 file changed, 1 insertion(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/e31d3ed5601e07f2<br/><br/> Convert RT ticket reference to GH<br/> James E Keenan 1 file changed, 1 insertion(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/148136c313ee439b<br/><br/> sv.c: make PUSH_EXTEND_MORTAL__SV_C an inline function<br/> Lukas Mai 1 file changed, 16 insertions(+), 15 deletions(-<br/> https://github.com/Perl/perl5/commit/97d0d863372c5eff<br/><br/> perldelta for &#39;catch (my $e)&#39; diagnostic<br/> Lukas Mai 1 file changed, 16 insertions(+)<br/> https://github.com/Perl/perl5/commit/d1bb39457a8845dd<br/><br/> toke.c: explicitly diagnose &#39;catch (my $e)&#39;<br/> Lukas Mai 3 files changed, 65 insertions(+), 8 deletions(-<br/> https://github.com/Perl/perl5/commit/88ff8dafb1a058b1<br/><br/> perly.y, op.c: PL_in_my is an enum (kind of), not a bool<br/> Lukas Mai 5 files changed, 9 insertions(+), 9 deletions(-)<br/> https://github.com/Perl/perl5/commit/9e492c255d5e10e2<br/><br/> Reapply &quot;Attempt to remove deprecated sv_locking/unlocking&quot;<br/> Karl Williamson 6 files changed, 3 insertions(+), 68 deletions(-<br/> https://github.com/Perl/perl5/commit/2b8cbf5b9e4d6ee9<br/><br/> Make sure mathoms gets loaded<br/> Karl Williamson 5 files changed, 25 insertions(+)<br/> https://github.com/Perl/perl5/commit/0f6279cac483c346<br/><br/> Rm Perl_sv_pv(byte)? from mathoms<br/> Karl Williamson 4 files changed, 11 insertions(+), 49 deletions(<br/> https://github.com/Perl/perl5/commit/5df7a2e2277b1803<br/><br/> Rm Perl_newHV() from mathoms<br/> Karl Williamson 4 files changed, 7 insertions(+), 15 deletions(-<br/> https://github.com/Perl/perl5/commit/c13b3b863b3836be<br/><br/> Rm Perl_sv_pvutf8() from mathoms<br/> Karl Williamson 4 files changed, 7 insertions(+), 16 deletions(-<br/> https://github.com/Perl/perl5/commit/10e38d94b58fffcb<br/><br/> Rm Perl_sv_utf8_upgrade() from mathoms<br/> Karl Williamson 4 files changed, 6 insertions(+), 18 deletions(-<br/> https://github.com/Perl/perl5/commit/a810de6508814172<br/><br/> Convert Perl_hv_foo to hv_foo and rm from mathoms<br/> Karl Williamson 4 files changed, 25 insertions(+), 98 deletions(<br/> https://github.com/Perl/perl5/commit/5144e0d9e6751711<br/><br/> Make Perl_sv_setsv a macro and rm from mathoms<br/> Karl Williamson 4 files changed, 6 insertions(+), 18 deletions(-<br/> https://github.com/Perl/perl5/commit/c1ae415246f1e0bd<br/><br/> Make Perl_sv_mortalcopy a macro and rm from mathoms<br/> Karl Williamson 4 files changed, 7 insertions(+), 12 deletions(-<br/> https://github.com/Perl/perl5/commit/ca4ce29c796a6752<br/><br/> mathoms.c Remove functions that just call their macro<br/> Karl Williamson 4 files changed, 249 insertions(+), 572 deletion<br/> https://github.com/Perl/perl5/commit/a5fc9ab124f4f767<br/><br/> mathoms.c: Convert Perl_foo definitions to call foo<br/> Karl Williamson 1 file changed, 41 insertions(+), 49 deletions(-<br/> https://github.com/Perl/perl5/commit/5b36fc695957614a<br/><br/> mathoms.c Remove functions that just call their macro<br/> Karl Williamson 4 files changed, 88 insertions(+), 164 deletions<br/> https://github.com/Perl/perl5/commit/b7a7434345a06e5d<br/><br/> Move pod from mathoms.c to respective files<br/> Karl Williamson 2 files changed, 50 insertions(+), 62 deletions(<br/> https://github.com/Perl/perl5/commit/a3bd1cdbc1851618<br/><br/> regen/embed.pl: Fix auto longname gen when no arglist<br/> Karl Williamson 1 file changed, 3 insertions(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/876fe29b1de46f7d<br/><br/> embed.fnc: Update E flag description<br/> Karl Williamson 1 file changed, 2 insertions(+), 2 deletions(-)<br/> https://github.com/Perl/perl5/commit/96a7727df0813ba5<br/><br/> embed.fnc: _invlist_union() not publicly accessible<br/> Karl Williamson 1 file changed, 1 insertion(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/a81c01f5c1cd0880<br/><br/> op.h/op.c/peep.c - Optimise away empty if{} blocks<br/> Richard Leach 5 files changed, 148 insertions(+), 13 deletions<br/> https://github.com/Perl/perl5/commit/e7778069bc401e57<br/><br/> op.c/peep.c - Optimise away empty else{} blocks<br/> Richard Leach 6 files changed, 57 insertions(+), 8 deletions(-<br/> https://github.com/Perl/perl5/commit/75a310dd6d6a8cfc<br/><br/> Silence autodoc warning<br/> Karl Williamson 1 file changed, 2 insertions(+), 2 deletions(-)<br/> https://github.com/Perl/perl5/commit/613101d7fb08cecc<br/><br/> todo test for 16008 (truncate scalar fh)<br/> brian d foy 1 file changed, 15 insertions(+)<br/> https://github.com/Perl/perl5/commit/ca40375cd6658b54<br/><br/>Current branch maint-5.38<br/>1 commit. 1 unique author. 1 unique committer.<br/>1 file changed, 1 insertion(+), 1 deletion(-)<br/><br/>Snapshot: http://github.com/Perl/perl5/tarball/3b9631c726a54ceb<br/><br/> Minor correction to perldelta<br/> Steve Hay 1 file changed, 1 insertion(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/3b9631c726a54ceb<br/><br/>Current branch maint-5.40<br/>1 commit. 1 unique author. 1 unique committer.<br/>1 file changed, 1 insertion(+), 1 deletion(-)<br/><br/>Snapshot: http://github.com/Perl/perl5/tarball/f7d5d15fdf279c83<br/><br/> Minor correction to perldelta<br/> Steve Hay 1 file changed, 1 insertion(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/f7d5d15fdf279c83<br/><br/>New branch haarg/db-sub-overload-fixes<br/>3 commits. 1 unique author. 1 unique committer.<br/><br/>Snapshot: http://github.com/Perl/perl5/tarball/a2b1ab5d3784e8f9<br/><br/> bump perl5db VERSION<br/> Graham Knop 1 file changed, 1 insertion(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/a2b1ab5d3784e8f9<br/><br/> perl5db: only check sub names for non-references<br/> Graham Knop 1 file changed, 4 insertions(+), 4 deletions(-)<br/> https://github.com/Perl/perl5/commit/02494a5da6d05d6a<br/><br/> perl5db: use a lexical copy of $DB::sub inside DB::sub<br/> Graham Knop 1 file changed, 6 insertions(+)<br/> https://github.com/Perl/perl5/commit/a71385d4b292a5f6<br/><br/>New branch parsexs-length-t_pv<br/>3 commits. 1 unique author. 1 unique committer.<br/><br/>Snapshot: http://github.com/Perl/perl5/tarball/e2140899e7e27d98<br/><br/> Explicitly reject length(NAME) with typemaps other than T_PV<br/> Leon Timmermans 3 files changed, 30 insertions(+), 2 deletions(-<br/> https://github.com/Perl/perl5/commit/e2140899e7e27d98<br/><br/> Bump ExtUtils::ParseXS to 3.59<br/> Leon Timmermans 12 files changed, 12 insertions(+), 12 deletions<br/> https://github.com/Perl/perl5/commit/975d8393e11814c6<br/><br/> Pull in ExtUtils::ParseXS Changes file from CPAN<br/> Leon Timmermans 1 file changed, 9 insertions(+)<br/> https://github.com/Perl/perl5/commit/7c58ce3da0a7371e<br/><br/>Deleted branch sv_dup_doc_fixes<br/><br/>Martian commit 1db8709adb69c0e7dfaa52d3819ab0523cdef945<br/>1 commit. 1 unique author. 1 unique committer.<br/><br/>Snapshot: http://github.com/Perl/perl5/tarball/1db8709adb69c0e7<br/><br/> sv.c: make PUSH_EXTEND_MORTAL__SV_C an inline function<br/> Lukas Mai 1 file changed, 16 insertions(+), 15 deletions(-<br/> https://github.com/Perl/perl5/commit/1db8709adb69c0e7<br/><br/>Martian commit 6cb2c8f258ffca17db140e2b47b17f4d986a4c28<br/>3 commits. 1 unique author. 1 unique committer.<br/><br/>Snapshot: http://github.com/Perl/perl5/tarball/6cb2c8f258ffca17<br/><br/> perldelta for &#39;catch (my $e)&#39; diagnostic<br/> Lukas Mai 1 file changed, 16 insertions(+)<br/> https://github.com/Perl/perl5/commit/6cb2c8f258ffca17<br/><br/> toke.c: explicitly diagnose &#39;catch (my $e)&#39;<br/> Lukas Mai 3 files changed, 65 insertions(+), 8 deletions(-<br/> https://github.com/Perl/perl5/commit/c43d77915505bb24<br/><br/> perly.y, op.c: PL_in_my is an enum (kind of), not a bool<br/> Lukas Mai 5 files changed, 9 insertions(+), 9 deletions(-)<br/> https://github.com/Perl/perl5/commit/5cbe29418e1b34e2<br/><br/>Martian commit 2a93cd9a80f473c04a9873fc803232afe83b6632<br/>1 commit. 1 unique author. 1 unique committer.<br/><br/>Snapshot: http://github.com/Perl/perl5/tarball/2a93cd9a80f473c0<br/><br/> Add ASSERT_() a legal synonym for __ASSERT_()<br/> Karl Williamson 1 file changed, 18 insertions(+), 7 deletions(-)<br/> https://github.com/Perl/perl5/commit/2a93cd9a80f473c0<br/><br/>Martian commit c6a413a86e0ed5161e133164762f4e98cb7a0931<br/>1 commit. 1 unique author. 1 unique committer.<br/><br/>Snapshot: http://github.com/Perl/perl5/tarball/c6a413a86e0ed516<br/><br/> Convert RT ticket reference to GH<br/> James E Keenan 1 file changed, 1 insertion(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/c6a413a86e0ed516<br/><br/>Martian commit e7a6bb12a8feeb315e209446ad63cfacc8c9a39f<br/>2 commits. 1 unique author. 1 unique committer.<br/><br/>Snapshot: http://github.com/Perl/perl5/tarball/e7a6bb12a8feeb31<br/><br/> Reapply &quot;Attempt to remove deprecated sv_locking/unlocking&quot;<br/> Karl Williamson 6 files changed, 3 insertions(+), 68 deletions(-<br/> https://github.com/Perl/perl5/commit/e7a6bb12a8feeb31<br/><br/> Make sure mathoms gets loaded<br/> Karl Williamson 5 files changed, 25 insertions(+)<br/> https://github.com/Perl/perl5/commit/abaa2d40e327e00e<br/><br/>Martian commit 9a66bc24e378a29d00d9ec158a22e550f4f8826c<br/>1 commit. 1 unique author. 1 unique committer.<br/><br/>Snapshot: http://github.com/Perl/perl5/tarball/9a66bc24e378a29d<br/><br/> Mark do_open(), do_openn() as internal, not public<br/> Karl Williamson 1 file changed, 2 insertions(+), 2 deletions(-)<br/> https://github.com/Perl/perl5/commit/9a66bc24e378a29d<br/><br/>Martian commit cea3b6314d395edc0319814cd22f1d641faeef55<br/>1 commit. 1 unique author. 1 unique committer.<br/><br/>Snapshot: http://github.com/Perl/perl5/tarball/cea3b6314d395edc<br/><br/> Silence autodoc warning<br/> Karl Williamson 1 file changed, 2 insertions(+), 2 deletions(-)<br/> https://github.com/Perl/perl5/commit/cea3b6314d395edc<br/><br/>Martian commit e5b6b48ff2e159436f9e73a94f833e9f12d63321<br/>1 commit. 1 unique author. 1 unique committer.<br/><br/>Snapshot: http://github.com/Perl/perl5/tarball/e5b6b48ff2e15943<br/><br/> todo test for 16008 (truncate scalar fh)<br/> brian d foy 1 file changed, 15 insertions(+)<br/> https://github.com/Perl/perl5/commit/e5b6b48ff2e15943<br/><br/>Martian commit 63442f8646cf2635aec9cb8bdbe92c34519450f5<br/>12 commits. 1 unique author. 1 unique committer.<br/><br/>Snapshot: http://github.com/Perl/perl5/tarball/63442f8646cf2635<br/><br/> Rm Perl_sv_pv(byte)? from mathoms<br/> Karl Williamson 4 files changed, 11 insertions(+), 49 deletions(<br/> https://github.com/Perl/perl5/commit/63442f8646cf2635<br/><br/> Rm Perl_newHV() from mathoms<br/> Karl Williamson 4 files changed, 7 insertions(+), 15 deletions(-<br/> https://github.com/Perl/perl5/commit/d8da93e4c791c238<br/><br/> Rm Perl_sv_pvutf8() from mathoms<br/> Karl Williamson 4 files changed, 7 insertions(+), 16 deletions(-<br/> https://github.com/Perl/perl5/commit/7a875276716123b6<br/><br/> Rm Perl_sv_utf8_upgrade() from mathoms<br/> Karl Williamson 4 files changed, 6 insertions(+), 18 deletions(-<br/> https://github.com/Perl/perl5/commit/56e05b3dafa20957<br/><br/> Convert Perl_hv_foo to hv_foo and rm from mathoms<br/> Karl Williamson 4 files changed, 25 insertions(+), 98 deletions(<br/> https://github.com/Perl/perl5/commit/303b7a57dafc8caf<br/><br/> Make Perl_sv_setsv a macro and rm from mathoms<br/> Karl Williamson 4 files changed, 6 insertions(+), 18 deletions(-<br/> https://github.com/Perl/perl5/commit/1f8422479bd038d4<br/><br/> Make Perl_sv_mortalcopy a macro and rm from mathoms<br/> Karl Williamson 4 files changed, 7 insertions(+), 12 deletions(-<br/> https://github.com/Perl/perl5/commit/8785e0c90c04ce2b<br/><br/> mathoms.c Remove functions that just call their macro<br/> Karl Williamson 4 files changed, 249 insertions(+), 572 deletion<br/> https://github.com/Perl/perl5/commit/2b75c8bbd6114346<br/><br/> mathoms.c: Convert Perl_foo definitions to call foo<br/> Karl Williamson 1 file changed, 41 insertions(+), 49 deletions(-<br/> https://github.com/Perl/perl5/commit/234ef7879274c293<br/><br/> mathoms.c Remove functions that just call their macro<br/> Karl Williamson 4 files changed, 88 insertions(+), 164 deletions<br/> https://github.com/Perl/perl5/commit/c73cbe9258896a08<br/><br/> Move pod from mathoms.c to respective files<br/> Karl Williamson 2 files changed, 50 insertions(+), 62 deletions(<br/> https://github.com/Perl/perl5/commit/c85bd5195f7e30a3<br/><br/> regen/embed.pl: Fix auto longname gen when no arglist<br/> Karl Williamson 1 file changed, 3 insertions(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/5f86eaf38bd5857c<br/><br/>Ignored 106 GitHub auto-generated merge commits<br/> https://www.nntp.perl.org/group/perl.perl5.porters/2025/07/msg270145.html Wed, 30 Jul 2025 03:11:48 +0000 Re: no 'declaration after statement' error by Dave Mitchell On Tue, Jul 29, 2025 at 12:54:29PM +0100, Paul &quot;LeoNerd&quot; Evans wrote:<br/>&gt; On Tue, 29 Jul 2025 12:42:44 +0100<br/>&gt; Dave Mitchell &lt;[email protected]&gt; wrote:<br/>&gt; <br/>&gt; &gt; In the context of updating perlxs.pod, I wanted to find which version<br/>&gt; &gt; of perl stopped requiring that all C variable declarations come before<br/>&gt; &gt; statements. So I wrote a short &#39;bad&#39; XSUB and tested it against older<br/>&gt; &gt; perls, expecting it to give a C compiler error; but it worked back to<br/>&gt; &gt; at least perl 5.8.9. I&#39;m probably doing something obviously wrong,<br/>&gt; &gt; but I can&#39;t see why.<br/>&gt; <br/>&gt; It&#39;ll depend on the C compiler. gcc is very lax with allowing that even<br/>&gt; if you didn&#39;t explicitly pass `-std=c99`.<br/><br/>Having looked further, its appears that when building *perl*, we pass these<br/>flags to gcc:<br/><br/> -Werror=declaration-after-statement pre 5.36.0<br/> -Wno-declaration-after-statement post 5.36.0<br/><br/>but these flags *aren&#39;t* passed on to the C compiler by default when<br/>building XS modules. So XS modules won&#39;t complain on gcc, but might on<br/>other compilers.<br/><br/>Does that sound right?<br/><br/>-- <br/>&quot;But Sidley Park is already a picture, and a most amiable picture too.<br/>The slopes are green and gentle. The trees are companionably grouped at<br/>intervals that show them to advantage. The rill is a serpentine ribbon<br/>unwound from the lake peaceably contained by meadows on which the right<br/>amount of sheep are tastefully arranged.&quot; -- Lady Croom, &quot;Arcadia&quot;<br/> https://www.nntp.perl.org/group/perl.perl5.porters/2025/07/msg270144.html Tue, 29 Jul 2025 13:17:44 +0000 Re: no 'declaration after statement' error by Paul "LeoNerd" Evans On Tue, 29 Jul 2025 12:42:44 +0100<br/>Dave Mitchell &lt;[email protected]&gt; wrote:<br/><br/>&gt; In the context of updating perlxs.pod, I wanted to find which version<br/>&gt; of perl stopped requiring that all C variable declarations come before<br/>&gt; statements. So I wrote a short &#39;bad&#39; XSUB and tested it against older<br/>&gt; perls, expecting it to give a C compiler error; but it worked back to<br/>&gt; at least perl 5.8.9. I&#39;m probably doing something obviously wrong,<br/>&gt; but I can&#39;t see why.<br/><br/>It&#39;ll depend on the C compiler. gcc is very lax with allowing that even<br/>if you didn&#39;t explicitly pass `-std=c99`.<br/><br/>-- <br/>Paul &quot;LeoNerd&quot; Evans<br/><br/>[email protected]<br/>http://www.leonerd.org.uk/ | https://metacpan.org/author/PEVANS<br/> https://www.nntp.perl.org/group/perl.perl5.porters/2025/07/msg270143.html Tue, 29 Jul 2025 11:54:42 +0000 no 'declaration after statement' error by Dave Mitchell In the context of updating perlxs.pod, I wanted to find which version of<br/>perl stopped requiring that all C variable declarations come before<br/>statements. So I wrote a short &#39;bad&#39; XSUB and tested it against older<br/>perls, expecting it to give a C compiler error; but it worked back to at<br/>least perl 5.8.9. I&#39;m probably doing something obviously wrong, but I<br/>can&#39;t see why.<br/><br/>My two questions are:<br/><br/>1) Which perl release relaxed this restriction?<br/><br/>2) Why doesn&#39;t this XSUB give a C compiler error on older perls:<br/><br/> void<br/> foo(int i = 0)<br/> CODE:<br/> int j = 0;<br/><br/>which gets translated to this C code:<br/><br/> XS_EUPXS(XS_Foo__Bar_foo)<br/> {<br/> dVAR; dXSARGS;<br/> if (items &lt; 0 || items &gt; 1)<br/> croak_xs_usage(cv, &quot;i= 0&quot;);<br/> {<br/> int i;<br/><br/> if (items &lt; 1)<br/> i = 0;<br/> else {<br/> i = (int)SvIV(ST(0))<br/> ;<br/> }<br/> #line 22 &quot;Bar.xs&quot;<br/> int j = 0;<br/> #line 188 &quot;Bar.c&quot;<br/> }<br/> XSRETURN_EMPTY;<br/> }<br/><br/>where as AFAICT, the &#39;int j&#39; declaration *does* follow a statement.<br/><br/>-- <br/>It&#39;s not that I&#39;m afraid to die, I just don&#39;t want to be there when it<br/>happens.<br/> -- Woody Allen<br/> https://www.nntp.perl.org/group/perl.perl5.porters/2025/07/msg270142.html Tue, 29 Jul 2025 11:42:51 +0000 Re: Wierd behaviour of map when trying to fill a hash by Ovid On Sat, Jul 26, 2025 at 9:19&acirc;&#128;&macr;PM Russ Allbery &lt;[email protected]&gt; wrote: <br/> <br/>&gt; Jan Jansen via perl5-porters &lt;[email protected]&gt; writes: <br/>&gt; <br/>&gt; &gt; Running the map construct to create a hash behaves oddly under specific <br/>&gt; &gt; circumstances. <br/>&gt; <br/>&gt; &gt; Typical expected behaviour to create a hash reference for a list <br/>&gt; &gt; $hashref = { map { &lt;instructions&gt;; $key =&gt; $value } @list }; <br/>&gt; <br/>&gt; &gt; What work : <br/>&gt; &gt; $hashref = { map { &#39;key_&#39;.$_ =&gt; $raw-&gt;{$_} } keys %$raw }; <br/>&gt; &gt; $hashref = { map { (&quot;key_.$_&quot; =&gt; $raw-&gt;{$_}) } keys %$raw }; <br/>&gt; <br/>&gt; &gt; What generates a syntax error : <br/>&gt; &gt; $hashref = { map { &quot;key_$_&quot; =&gt; $raw-&gt;{$_} } keys %$raw }; <br/>&gt; <br/>&gt; I believe this is the known edge case in the Perl parser that is <br/>&gt; documented in perldoc -f map: <br/>&gt; <br/>&gt; &lt;snip&gt; <br/>&gt; <br/>&gt; my %hash = map {; &quot;\L$_&quot; =&gt; 1 } @array # this also works <br/>&gt; <br/> <br/>Putting the semicolon after the opening curly, to me, is the most <br/>consistent and understandable approach to this problem. It&#39;s also how I <br/>learned to spot Abigail&#39;s code when I used to work with them. I thought it <br/>was silly at the time. Once again, Abigail was right and I was not. <br/> <br/>Best, <br/>Ovid <br/>-- <br/>https://curtispoe.org/ <br/> https://www.nntp.perl.org/group/perl.perl5.porters/2025/07/msg270141.html Mon, 28 Jul 2025 16:06:37 +0000 Re: Wierd behaviour of map when trying to fill a hash by Uri Guttman On 7/23/25 06:58, Jan Jansen via perl5-porters wrote:<br/>&gt; Typical expected behaviour to create a hash reference for a list<br/>&gt; $hashref = { map { &lt;instructions&gt;; $key =&gt; $value } @list };<br/>&gt;<br/>&gt; What work :<br/>&gt; $hashref = { map { &#39;key_&#39;.$_ =&gt; $raw-&gt;{$_} } keys %$raw };<br/>&gt; $hashref = { map { (&quot;key_.$_&quot; =&gt; $raw-&gt;{$_}) } keys %$raw };<br/>&gt;<br/>&gt; What generates a syntax error :<br/>&gt; $hashref = { map { &quot;key_$_&quot; =&gt; $raw-&gt;{$_} } keys %$raw };<br/>&gt;<br/>&gt; **Steps to Reproduce**<br/>&gt; &lt;!-- A one-liner or script to reproduce the issue. --&gt;<br/>&gt;<br/>&gt; $ perl -e &#39;{ map { &quot;key_$_&quot; =&gt; $raw-&gt;{$_} } (keys %$raw) };&#39;<br/>&gt; syntax error at -e line 1, near &quot;} (&quot;<br/>&gt; Execution of -e aborted due to compilation errors.<br/>&gt;<br/>&gt; **Expected behavior**<br/>&gt; &lt;!-- A clear and concise description of what you expected to happen. --&gt;<br/>&gt; Similar to<br/>&gt; $ perl -e &#39;{ map { &#39;key_&#39;.$_ =&gt; $raw-&gt;{$_} } (keys %$raw) };&#39;<br/>&gt; No syntax error !<br/>&gt;<br/><br/>both of these work have no syntax errors. perl has an issue determining <br/>whether you want map to call a code block or build an anon hash where <br/>you have {}. putting a comma after the block says you want a hash ref. <br/>putting the code inside () and a comma tells map it is code to run.<br/><br/>perl -e &#39;{ map { &quot;key_$_&quot; =&gt; $raw-&gt;{$_} }, (keys %$raw) };&#39; # makes&nbsp; a <br/>hash ref inside the anon hash<br/>perl -e &#39;{ map ( &quot;key_$_&quot; =&gt; $raw-&gt;{$_} ), (keys %$raw) };&#39; # makes what <br/>you want<br/><br/>uri<br/><br/>-- <br/>https://uriguttman.blogspot.com/<br/>A Long Strange Trip<br/>A blog about computers, food, my life and silliness.<br/> https://www.nntp.perl.org/group/perl.perl5.porters/2025/07/msg270140.html Mon, 28 Jul 2025 15:19:58 +0000 Re: purpose of t/run/todo.t by Karl Williamson On 7/27/25 05:35, Ovid wrote: <br/>&gt; On Sun, Jul 27, 2025 at 11:59&#x202F;AM Dave Mitchell &lt;[email protected] <br/>&gt; &lt;mailto:[email protected]&gt;&gt; wrote: <br/>&gt; <br/>&gt; I still don&#39;t &quot;get&quot; the purpose of&nbsp; t/run/todo.t. What&#39;s the difference <br/>&gt; between adding a TODO to that generic file for a reported but not yet <br/>&gt; fixed issue, as opposed to the traditional approach of adding a TODO <br/>&gt; test <br/>&gt; to the relevant .t file which tests that aspect of perl? <br/>&gt; <br/>&gt; When should we add to which file? <br/> <br/>The purpose of this file is to encourage newcomers to contribute without <br/>the additional headache of their having to figure out our internal <br/>structure and conform to it. <br/> <br/>It seems to me that this is a way to get people started. Just look <br/>through the open tickets, and convert the failure that&#39;s in the text of <br/>the ticket to something that is in our code base of tests. You don&#39;t <br/>have to know very much to do this. And maybe they will get hooked on <br/>contributing. <br/> <br/>I figured that once fixes were added, the fixer could move the test to <br/>the appropriate .t. <br/> <br/>I hadn&#39;t thought of the possibility of these duplicating an existing <br/>todo test; I rarely see any of those. What I think could be done is to <br/>grep for them, find their ticket numbers, and add that list to <br/>t/run/todo.t as comments, so that people would see that and not <br/>duplicate what&#39;s already been done. <br/> <br/>It would be nice if some people would take it on themselves to convert <br/>the text of failures in a ticket into an actual executable test, as <br/>those tickets come in. A high skill level isn&#39;t generally required. <br/> <br/>But we have 2K open tickets already, and so I hoped to get people to <br/>start on those, without worrying about new ones coming along. <br/> <br/>I would expect an experienced contributor to add tests in the files they <br/>deem best; I can&#39;t remember the last time I saw a TODO added for an old <br/>ticket by any of our team. Then there&#39;s no conflict. <br/> <br/>I&#39;m open to other possibilities that don&#39;t impose an extra cognitive <br/>load on the people I&#39;m hoping to get to contribute. <br/> <br/> <br/> <br/> <br/>&gt; <br/>&gt; <br/>&gt; On Sun, Jul 27, 2025 at 11:59&#x202F;AM Dave Mitchell &lt;[email protected] <br/>&gt; &lt;mailto:[email protected]&gt;&gt; wrote: <br/>&gt; <br/>&gt; I still don&#39;t &quot;get&quot; the purpose of&nbsp; t/run/todo.t. What&#39;s the difference <br/>&gt; between adding a TODO to that generic file for a reported but not yet <br/>&gt; fixed issue, as opposed to the traditional approach of adding a TODO <br/>&gt; test <br/>&gt; to the relevant .t file which tests that aspect of perl? <br/>&gt; <br/>&gt; When should we add to which file? <br/>&gt; <br/>&gt; <br/>&gt; I get tired of walking into&nbsp;shops and watching developers grep to see if <br/>&gt; they can find tests for a feature. I can&#39;t say it applies here, but in a <br/>&gt; number of my consulting contracts, I&#39;ve found that reorganizing test <br/>&gt; suites to mirror main file structure (instead of functionality) made it <br/>&gt; dead easy to find where the tests are for a given thing. <br/>&gt; <br/>&gt; &nbsp; &nbsp; . <br/>&gt; &#x251C;&#x2500;&#x2500; lib <br/>&gt; &#x2502; &nbsp; &#x251C;&#x2500;&#x2500; Foo.pm <br/>&gt; &#x2502; &nbsp; &#x251C;&#x2500;&#x2500; Bar.pm <br/>&gt; &#x2502; &nbsp; &#x2514;&#x2500;&#x2500; Foo <br/>&gt; &#x2502; &nbsp; &nbsp; &nbsp; &#x2514;&#x2500;&#x2500; Baz.pm <br/>&gt; &#x2502; <br/>&gt; &#x2514;&#x2500;&#x2500; t <br/>&gt; &#x2514;&#x2500;&#x2500; tests <br/>&gt; &#x251C;&#x2500;&#x2500; bar.t <br/>&gt; &nbsp;&nbsp; &nbsp; &nbsp; &#x251C;&#x2500;&#x2500; foo.t <br/>&gt; &nbsp;&nbsp; &#x2514;&#x2500;&#x2500; foo <br/>&gt; &nbsp;&nbsp; &#x2514;&#x2500;&#x2500; baz.t <br/>&gt; <br/>&gt; That works great for many tests and would make it clear where the TODO <br/>&gt; tests would be (though I use xUnit instead of .t tests, but it&#39;s the <br/>&gt; same principle). <br/>&gt; <br/>&gt; Best, <br/>&gt; Ovid <br/>&gt; -- <br/>&gt; https://curtispoe.org/ &lt;https://curtispoe.org/&gt; <br/> <br/> https://www.nntp.perl.org/group/perl.perl5.porters/2025/07/msg270139.html Sun, 27 Jul 2025 18:08:43 +0000 Re: Perl 5.40.3-RC1 is now available! by Steve Hay via perl5-porters On Sun, 27 Jul 2025 at 11:32, Dan &lt;[email protected]&gt; wrote:<br/>&gt;<br/>&gt; Small note, in the perldelta for 5.40.3 RC1 and 5.38.5 RC1, they reference &quot;Perl 5.42 will no longer chdir to each handle.&quot; This should be updated to reference these maintenance releases which presumably will also exhibit this behavior.<br/>&gt;<br/><br/>Fixed. Thanks for spotting this!<br/> https://www.nntp.perl.org/group/perl.perl5.porters/2025/07/msg270138.html Sun, 27 Jul 2025 15:28:01 +0000 Re: purpose of t/run/todo.t by Ovid On Sun, Jul 27, 2025 at 11:59&acirc;&#128;&macr;AM Dave Mitchell &lt;[email protected]&gt; wrote: <br/> <br/>&gt; I still don&#39;t &quot;get&quot; the purpose of t/run/todo.t. What&#39;s the difference <br/>&gt; between adding a TODO to that generic file for a reported but not yet <br/>&gt; fixed issue, as opposed to the traditional approach of adding a TODO test <br/>&gt; to the relevant .t file which tests that aspect of perl? <br/>&gt; <br/>&gt; When should we add to which file? <br/>&gt; <br/> <br/>On Sun, Jul 27, 2025 at 11:59&acirc;&#128;&macr;AM Dave Mitchell &lt;[email protected]&gt; wrote: <br/> <br/>&gt; I still don&#39;t &quot;get&quot; the purpose of t/run/todo.t. What&#39;s the difference <br/>&gt; between adding a TODO to that generic file for a reported but not yet <br/>&gt; fixed issue, as opposed to the traditional approach of adding a TODO test <br/>&gt; to the relevant .t file which tests that aspect of perl? <br/>&gt; <br/>&gt; When should we add to which file? <br/> <br/> <br/>I get tired of walking into shops and watching developers grep to see if <br/>they can find tests for a feature. I can&#39;t say it applies here, but in a <br/>number of my consulting contracts, I&#39;ve found that reorganizing test suites <br/>to mirror main file structure (instead of functionality) made it dead easy <br/>to find where the tests are for a given thing. <br/> <br/> . <br/> &acirc;&#148;&#156;&acirc;&#148;&#128;&acirc;&#148;&#128; lib <br/> &acirc;&#148;&#130; &acirc;&#148;&#156;&acirc;&#148;&#128;&acirc;&#148;&#128; Foo.pm <br/> &acirc;&#148;&#130; &acirc;&#148;&#156;&acirc;&#148;&#128;&acirc;&#148;&#128; Bar.pm <br/> &acirc;&#148;&#130; &acirc;&#148;&#148;&acirc;&#148;&#128;&acirc;&#148;&#128; Foo <br/> &acirc;&#148;&#130; &acirc;&#148;&#148;&acirc;&#148;&#128;&acirc;&#148;&#128; Baz.pm <br/> &acirc;&#148;&#130; <br/> &acirc;&#148;&#148;&acirc;&#148;&#128;&acirc;&#148;&#128; t <br/> &acirc;&#148;&#148;&acirc;&#148;&#128;&acirc;&#148;&#128; tests <br/> &acirc;&#148;&#156;&acirc;&#148;&#128;&acirc;&#148;&#128; bar.t <br/> &acirc;&#148;&#156;&acirc;&#148;&#128;&acirc;&#148;&#128; foo.t <br/> &acirc;&#148;&#148;&acirc;&#148;&#128;&acirc;&#148;&#128; foo <br/> &acirc;&#148;&#148;&acirc;&#148;&#128;&acirc;&#148;&#128; baz.t <br/> <br/>That works great for many tests and would make it clear where the TODO <br/>tests would be (though I use xUnit instead of .t tests, but it&#39;s the same <br/>principle). <br/> <br/>Best, <br/>Ovid <br/>-- <br/>https://curtispoe.org/ <br/> https://www.nntp.perl.org/group/perl.perl5.porters/2025/07/msg270137.html Sun, 27 Jul 2025 11:35:52 +0000 Re: Perl 5.40.3-RC1 is now available! by Dan On Mon, Jul 21, 2025 at 4:26&acirc;&#128;&macr;PM Steve Hay via perl5-porters &lt; <br/>[email protected]&gt; wrote: <br/> <br/>&gt; In 1522, thirty years after Columbus&#39; landfall in the Bahamas, another <br/>&gt; ship sailing west in the service of Spain completed the first voyage <br/>&gt; round the world. It had set out under the command of a Portuguese, <br/>&gt; Magellan, who had got as far as the Philippines, where he was killed. <br/>&gt; By then he had discovered and sailed through the straits named after him <br/>&gt; and with this voyage and its demonstration that the great oceans were <br/>&gt; all interconnected, the prologue to the European age can be considered <br/>&gt; over. <br/>&gt; <br/>&gt; -- J. M. Roberts, &quot;The Penguin History of Europe&quot; <br/>&gt; <br/>&gt; We are pleased to announce the first release candidate of version 40.3, <br/>&gt; the third maintenance release of version 40 of Perl 5. <br/>&gt; <br/>&gt; You will soon be able to download Perl 5.40.3-RC1 from your favourite <br/>&gt; CPAN mirror or find it at: <br/>&gt; <br/>&gt; https://metacpan.org/release/SHAY/perl-5.40.3-RC1/ <br/>&gt; <br/>&gt; SHA256 digests for this release are: <br/>&gt; <br/>&gt; *perl-5.40.3-RC1.tar.gz: <br/>&gt; f0771e49db212191347589da4315ca5e002105493e08372b525201f015d15ec1 <br/>&gt; <br/>&gt; *perl-5.40.3-RC1.tar.xz: <br/>&gt; e0d3e4555458cbfbbd994d024d676150286d8f8dcd48a1deeafcab21a64783d6 <br/>&gt; <br/>&gt; You can find a full list of changes in the file &quot;perldelta.pod&quot; located <br/>&gt; in the &quot;pod&quot; directory inside the release and on the web. <br/>&gt; <br/>&gt; ***Please, please, please*** test your code against perl-5.40.3-RC1. <br/>&gt; This is your last chance to point out any critical regressions before <br/>&gt; v5.40.3 ships &quot;for real,&quot; and we&#39;d rather fix things for v5.40.3 than <br/>&gt; for v5.40.4! <br/>&gt; <br/>&gt; The final v5.40.3 is expected to ship on 3 August. <br/>&gt; <br/>&gt; Steve Hay <br/>&gt; <br/> <br/>Small note, in the perldelta for 5.40.3 RC1 and 5.38.5 RC1, they reference <br/>&quot;Perl 5.42 will no longer chdir to each handle.&quot; This should be updated to <br/>reference these maintenance releases which presumably will also exhibit <br/>this behavior. <br/> <br/>-Dan <br/> https://www.nntp.perl.org/group/perl.perl5.porters/2025/07/msg270136.html Sun, 27 Jul 2025 10:32:49 +0000 purpose of t/run/todo.t by Dave Mitchell Hi Karl,<br/>I still don&#39;t &quot;get&quot; the purpose of t/run/todo.t. What&#39;s the difference<br/>between adding a TODO to that generic file for a reported but not yet<br/>fixed issue, as opposed to the traditional approach of adding a TODO test<br/>to the relevant .t file which tests that aspect of perl?<br/><br/>When should we add to which file?<br/><br/>-- <br/>My Dad used to say &#39;always fight fire with fire&#39;, which is probably why<br/>he got thrown out of the fire brigade.<br/> https://www.nntp.perl.org/group/perl.perl5.porters/2025/07/msg270135.html Sun, 27 Jul 2025 09:59:57 +0000 Re: New XS features? by Leon Timmermans On Mon, Jul 7, 2025 at 7:45&acirc;&#128;&macr;PM Leon Timmermans &lt;[email protected]&gt; wrote: <br/>&gt; <br/>&gt; Given Dave&#39;s recent refactoring of ExtUtils::ParseXS I suspect we are <br/>&gt; now in a much better position to actually add new features, instead of <br/>&gt; being stuck in essentially the feature set we had in the late 90s. <br/>&gt; <br/>&gt; In particular I would like to propose two small features. <br/>&gt; <br/>&gt; 1. I want a way to declare that all XSUBs with a CODE section should <br/>&gt; be assumed to be OUTPUT: RETVAL, unless their return type is void. I <br/>&gt; understand why it isn&#39;t the default conceptually, but in my experience <br/>&gt; it&#39;s what people want 99% of the time. It should probably be <br/>&gt; overridable with an empty OUTPUT section for the rare case when it <br/>&gt; isn&#39;t. <br/>&gt; <br/>&gt; 2. I want a simple way to declare constants. We currently have <br/>&gt; ExtUtils::Constant for this sort of thing, but it&#39;s overly complicated <br/>&gt; for most use-cases, and putting the constants in Makefile.PL instead <br/>&gt; of the XS files feels entirely wrong. This is an easy problem that <br/>&gt; should have an easy solution. Something like: <br/>&gt; <br/>&gt; CONST: UV MY_CONSTANT <br/>&gt; or <br/>&gt; CONST: IV MY_CONSTANT = 3 <br/> <br/>Currently I&#39;m experiencing two problems around strings that could use <br/>better solutions than what is currently available. <br/> <br/>1. The char pointer typemaps currently do not do SV_CHECK_THINK_FIRST, <br/>and hence can very easily mess up COW strings. But obviously should <br/>only do so selectively. Fortunately this scenario is probably uncommon <br/>(given one often has to resize or some such, one usually needs the <br/>full SV anyway). <br/> <br/>2. The char pointer typemaps predate unicode support, and therefore <br/>code using them has the unicode bug. One really needs to handle these <br/>separately (SvPVbyte versus SvPVutf8). Using two macro-redefines one <br/>can sort-of fix this for the whole module, but that becomes a problem <br/>when you need both kinds in the same module. <br/> <br/>One approach out of this predicament would be to use separate typemaps <br/>for all these permutations. A major problem with that is that the <br/>length() feature is hardcoded to only work with the `T_PV` typemap. <br/>Making that work would probably require adding a new type of map <br/>handling input with length. <br/> <br/>Another approach might be modifiers on the types (much like IN/OUT/&acirc;&#128;&brvbar; <br/>already exist nowadays). This feels more flexible (given that the <br/>above approach gives increasingly more permutations) but puts more <br/>weight on ParseXS. <br/> <br/>Leon <br/> https://www.nntp.perl.org/group/perl.perl5.porters/2025/07/msg270134.html Sun, 27 Jul 2025 01:28:57 +0000 Re: Wierd behaviour of map when trying to fill a hash by Russ Allbery Jan Jansen via perl5-porters &lt;[email protected]&gt; writes:<br/><br/>&gt; Running the map construct to create a hash behaves oddly under specific<br/>&gt; circumstances.<br/><br/>&gt; Typical expected behaviour to create a hash reference for a list<br/>&gt; $hashref = { map { &lt;instructions&gt;; $key =&gt; $value } @list };<br/><br/>&gt; What work :<br/>&gt; $hashref = { map { &#39;key_&#39;.$_ =&gt; $raw-&gt;{$_} } keys %$raw };<br/>&gt; $hashref = { map { (&quot;key_.$_&quot; =&gt; $raw-&gt;{$_}) } keys %$raw };<br/><br/>&gt; What generates a syntax error :<br/>&gt; $hashref = { map { &quot;key_$_&quot; =&gt; $raw-&gt;{$_} } keys %$raw };<br/><br/>I believe this is the known edge case in the Perl parser that is<br/>documented in perldoc -f map:<br/><br/> &quot;{&quot; starts both hash references and blocks, so &quot;map { ...&quot; could be<br/> either the start of map BLOCK LIST or map EXPR, LIST. Because Perl<br/> doesn&#39;t look ahead for the closing &quot;}&quot; it has to take a guess at which<br/> it&#39;s dealing with based on what it finds just after the &quot;{&quot;. Usually<br/> it gets it right, but if it doesn&#39;t it won&#39;t realize something is<br/> wrong until it gets to the &quot;}&quot; and encounters the missing (or<br/> unexpected) comma. The syntax error will be reported close to the &quot;}&quot;,<br/> but you&#39;ll need to change something near the &quot;{&quot; such as using a unary<br/> &quot;+&quot; or semicolon to give Perl some help:<br/><br/> my %hash = map { &quot;\L$_&quot; =&gt; 1 } @array # perl guesses EXPR. wrong<br/> my %hash = map { +&quot;\L$_&quot; =&gt; 1 } @array # perl guesses BLOCK. right<br/> my %hash = map {; &quot;\L$_&quot; =&gt; 1 } @array # this also works<br/> my %hash = map { (&quot;\L$_&quot; =&gt; 1) } @array # as does this<br/> my %hash = map { lc($_) =&gt; 1 } @array # and this.<br/> my %hash = map +( lc($_) =&gt; 1 ), @array # this is EXPR and works!<br/><br/> my %hash = map ( lc($_), 1 ), @array # evaluates to (1, @array)<br/><br/> or to force an anon hash constructor use &quot;+{&quot;:<br/><br/> my @hashes = map +{ lc($_) =&gt; 1 }, @array # EXPR, so needs<br/> # comma at end<br/><br/> to get a list of anonymous hashes each with only one entry apiece.<br/><br/>If you instead write:<br/><br/> $hashref = { map { +&quot;key_$_&quot; =&gt; $raw-&gt;{$_} } keys %$raw };<br/><br/>that will unconfuse the parser.<br/><br/>-- <br/>#!/usr/bin/perl -- Russ Allbery, Just Another Perl Hacker<br/>$^=q;@!&gt;~|{&gt;krw&gt;yn{u&lt;$$&lt;[~||&lt;Juukn{=,&lt;S~|}&lt;Jwx}qn{&lt;Yn{u&lt;Qjltn{ &gt; 0gFzD gD,<br/> 00Fz, 0,,( 0hF 0g)F/=, 0&gt; &quot;L$/GEIFewe{,$/ 0C$~&gt; &quot;@=,m,|,(e 0.), 01,pnn,y{<br/>rw} &gt;;,$0=q,$,,($_=$^)=~y,$/ C-~&gt;&lt;@=\n\r,-~$:-u/ #y,d,s,(\$.),$1,gee,print<br/> https://www.nntp.perl.org/group/perl.perl5.porters/2025/07/msg270133.html Sat, 26 Jul 2025 19:19:53 +0000 Wierd behaviour of map when trying to fill a hash by Jan Jansen via perl5-porters This is a bug report for perl from [email protected], <br/>generated with the help of perlbug 1.43 running under perl 5.40.2. <br/> <br/> <br/>----------------------------------------------------------------- <br/>&lt;!--[Please describe your issue here]--&gt; <br/> <br/>**Description** <br/>&lt;!-- A clear and concise description of what the bug is. --&gt; <br/> <br/>Running the map construct to create a hash behaves oddly under specific circumstances. <br/> <br/>Typical expected behaviour to create a hash reference for a list <br/>$hashref = { map { &lt;instructions&gt;; $key =&gt; $value } @list }; <br/> <br/>What work : <br/>$hashref = { map { &#39;key_&#39;.$_ =&gt; $raw-&gt;{$_} } keys %$raw }; <br/>$hashref = { map { (&quot;key_.$_&quot; =&gt; $raw-&gt;{$_}) } keys %$raw }; <br/> <br/>What generates a syntax error : <br/>$hashref = { map { &quot;key_$_&quot; =&gt; $raw-&gt;{$_} } keys %$raw }; <br/> <br/>**Steps to Reproduce** <br/>&lt;!-- A one-liner or script to reproduce the issue. --&gt; <br/> <br/>$ perl -e &#39;{ map { &quot;key_$_&quot; =&gt; $raw-&gt;{$_} } (keys %$raw) };&#39; <br/>syntax error at -e line 1, near &quot;} (&quot; <br/>Execution of -e aborted due to compilation errors. <br/> <br/>**Expected behavior** <br/>&lt;!-- A clear and concise description of what you expected to happen. --&gt; <br/>Similar to <br/>$ perl -e &#39;{ map { &#39;key_&#39;.$_ =&gt; $raw-&gt;{$_} } (keys %$raw) };&#39; <br/>No syntax error ! <br/> <br/>&lt;!--[Please do not change anything below this line]--&gt; <br/>&lt;!------------------------------------------------------------------- --&gt; <br/> <br/> <br/>--- <br/>**Flags** <br/>- category=core <br/>- severity=low <br/>--- <br/>**Perl configuration** <br/>``` <br/>Site configuration information for perl 5.40.2: <br/> <br/>Configured by Red Hat, Inc. at Mon Apr 14 00:00:00 UTC 2025. <br/> <br/>Summary of my perl5 (revision 5 version 40 subversion 2) configuration: <br/> <br/> Platform: <br/> osname=linux <br/> osvers=6.11.0 <br/> archname=x86_64-linux-thread-multi <br/> uname=&#39;linux localhost 6.11.0 #1 smp preempt_dynamic 6.11.0 x86_64 gnulinux &#39; <br/> config_args=&#39;-des -Doptimize=none -Dccflags=-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wno-complain-wrong-lang -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -Dldflags=-Wl,-z,relro -Wl,--as-needed -Wl,-z,pack-relative-relocs -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,--build-id=sha1 -Dccdlflags=-Wl,--enable-new-dtags -Wl,-z,relro -Wl,--as-needed -Wl,-z,pack-relative-relocs -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld <br/>-specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,--build-id=sha1 -Dlddlflags=-shared -Wl,-z,relro -Wl,--as-needed -Wl,-z,pack-relative-relocs -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,--build-id=sha1 -Dshrpdir=/usr/lib64 -DDEBUGGING=-g -Dversion=5.40.2 -Dmyhostname=localhost -Dperladmin=root@localhost -Dcc=gcc -Dcf_by=Red Hat, Inc. -Dprefix=/usr -Dman1dir=/usr/share/man/man1 -Dman3dir=/usr/share/man/man3 -Dvendorprefix=/usr -Dsiteprefix=/usr/local -Dsitelib=/usr/local/share/perl5/5.40 -Dsitearch=/usr/local/lib64/perl5/5.40 -Dprivlib=/usr/share/perl5 -Dvendorlib=/usr/share/perl5/vendor_perl -Darchlib=/usr/lib64/perl5 -Dvendorarch=/usr/lib64/perl5/vendor_perl -Darchname=x86_64-linux-thread-multi -Dlibpth=/usr/local/lib64 /lib64 /usr/lib64 -Duseshrplib -Dusethreads -Duseithreads -Dusedtrace=/usr/bin/dtrace <br/>-Duselargefiles -Dd_semctl_semun -Di_db -Ui_ndbm -Di_gdbm -Di_shadow -Di_syslog -Dman3ext=3pm -Duseperlio -Dinstallusrbinperl=n -Ubincompat5005 -Uversiononly -Dpager=/usr/bin/less -isr -Dd_gethostent_r_proto -Ud_endhostent_r_proto -Ud_sethostent_r_proto -Ud_endprotoent_r_proto -Ud_setprotoent_r_proto -Ud_endservent_r_proto -Ud_setservent_r_proto -Dscriptdir=/usr/bin -Dusesitecustomize -Duse64bitint&#39; <br/> hint=recommended <br/> useposix=true <br/> d_sigaction=define <br/> useithreads=define <br/> usemultiplicity=define <br/> use64bitint=define <br/> use64bitall=define <br/> uselongdouble=undef <br/> usemymalloc=n <br/> default_inc_excludes_dot=define <br/> Compiler: <br/> cc=&#39;gcc&#39; <br/> ccflags =&#39;-D_REENTRANT -D_GNU_SOURCE -O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wno-complain-wrong-lang -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fwrapv -fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64&#39; <br/> optimize=&#39; -g&#39; <br/> cppflags=&#39;-D_REENTRANT -D_GNU_SOURCE -O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wno-complain-wrong-lang -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -fwrapv -fno-strict-aliasing -I/usr/local/include&#39; <br/> ccversion=&#39;&#39; <br/> gccversion=&#39;14.2.1 20250110 (Red Hat 14.2.1-7)&#39; <br/> gccosandvers=&#39;&#39; <br/> intsize=4 <br/> longsize=8 <br/> ptrsize=8 <br/> doublesize=8 <br/> byteorder=12345678 <br/> doublekind=3 <br/> d_longlong=define <br/> longlongsize=8 <br/> d_longdbl=define <br/> longdblsize=16 <br/> longdblkind=3 <br/> ivtype=&#39;long&#39; <br/> ivsize=8 <br/> nvtype=&#39;double&#39; <br/> nvsize=8 <br/> Off_t=&#39;off_t&#39; <br/> lseeksize=8 <br/> alignbytes=8 <br/> prototype=define <br/> Linker and Libraries: <br/> ld=&#39;gcc&#39; <br/> ldflags =&#39;-Wl,-z,relro -Wl,--as-needed -Wl,-z,pack-relative-relocs -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,--build-id=sha1 -fstack-protector-strong -L/usr/local/lib&#39; <br/> libpth=/usr/local/lib64 /lib64 /usr/lib64 /usr/local/lib /usr/lib <br/> libs=-lpthread -lresolv -lgdbm -ldb -ldl -lm -lcrypt -lutil -lc -lgdbm_compat <br/> perllibs=-lpthread -lresolv -ldl -lm -lcrypt -lutil -lc <br/> libc=/lib/../lib64/libc.so.6 <br/> so=so <br/> useshrplib=true <br/> libperl=libperl.so <br/> gnulibc_version=&#39;2.40&#39; <br/> Dynamic Linking: <br/> dlsrc=dl_dlopen.xs <br/> dlext=so <br/> d_dlsymun=undef <br/> ccdlflags=&#39;-Wl,--enable-new-dtags -Wl,-z,relro -Wl,--as-needed -Wl,-z,pack-relative-relocs -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,--build-id=sha1 &#39; <br/> cccdlflags=&#39;-fPIC&#39; <br/> lddlflags=&#39;-lpthread -shared -Wl,-z,relro -Wl,--as-needed -Wl,-z,pack-relative-relocs -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,--build-id=sha1 -L/usr/local/lib -fstack-protector-strong&#39; <br/> <br/>Locally applied patches: <br/> Fedora Patch1: Removes date check, Fedora/RHEL specific <br/> Fedora Patch2: support for libdir64 <br/> Fedora Patch3: use libresolv instead of libbind <br/> Fedora Patch4: USE_MM_LD_RUN_PATH <br/> Fedora Patch5: Provide MM::maybe_command independently (bug #1129443) <br/> Fedora Patch6: Dont run one io test due to random builder failures <br/> Fedora Patch8: Define SONAME for libperl.so <br/> Fedora Patch9: Install libperl.so to -Dshrpdir value <br/> Fedora Patch10: Make *DBM_File desctructors thread-safe (RT#61912) <br/> Fedora Patch11: Replace EU::MakeMaker dependency with EU::MM::Utils in IPC::Cmd (bug #1129443) <br/> Fedora Patch12: Link XS modules to pthread library to fix linking with -z defs <br/> Fedora Patch13: Pass the correct CFLAGS to dtrace <br/> Fedora Patch200: Link XS modules to libperl.so with EU::CBuilder on Linux <br/> Fedora Patch201: Link XS modules to libperl.so with EU::MM on Linux <br/> Fedora Patch202: Add definition of OPTIMIZE to .ph files <br/> <br/>--- <br/>@INC for perl 5.40.2: <br/> /usr/local/lib64/perl5/5.40 <br/> /usr/local/share/perl5/5.40 <br/> /usr/lib64/perl5/vendor_perl <br/> /usr/share/perl5/vendor_perl <br/> /usr/lib64/perl5 <br/> /usr/share/perl5 <br/> <br/>--- <br/>Environment for perl 5.40.2: <br/> HOME=/home/jan <br/> LANG=en_US.UTF-8 <br/> LANGUAGE (unset) <br/> LD_LIBRARY_PATH (unset) <br/> LOGDIR (unset) <br/> PATH=/home/jan/.local/bin:/home/jan/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/var/lib/snapd/snap/bin <br/> PERL_BADLANG (unset) <br/> SHELL=/bin/bash <br/>``` <br/> <br/> https://www.nntp.perl.org/group/perl.perl5.porters/2025/07/msg270132.html Sat, 26 Jul 2025 19:07:15 +0000 Perl 5 Commit Summary by Perl 5 commit summary Perl 5 commit summary, activity since Wednesday<br/><br/>Current branch blead<br/>15 commits. 6 unique authors. 5 unique committers.<br/>19 files changed, 281 insertions(+), 89 deletions(-)<br/>Thanks, applied: Karl Williamson (2)<br/>Snapshot: http://github.com/Perl/perl5/tarball/f3a5b2b22f875a08<br/><br/> Revert &quot;Attempt to remove deprecated sv_locking/unlocking&quot;<br/> Karl Williamson 6 files changed, 68 insertions(+), 3 deletions(-<br/> https://github.com/Perl/perl5/commit/f3a5b2b22f875a08<br/><br/> Perl_more_bodies - figure out sizing from sv_type<br/> Richard Leach 5 files changed, 30 insertions(+), 22 deletions(<br/> https://github.com/Perl/perl5/commit/b40ae72cfcfd0eec<br/><br/> regmatch: Use new utf8_to_uv<br/> Karl Williamson 1 file changed, 7 insertions(+), 6 deletions(-)<br/> https://github.com/Perl/perl5/commit/9c39a33a0e817782<br/><br/> perlapi: Combine is_safe_syscall, IS_SAFE_SYSCALL<br/> Karl Williamson 2 files changed, 6 insertions(+), 15 deletions(-<br/> https://github.com/Perl/perl5/commit/194d4eac2f635f5c<br/><br/> Skip one test under miniperl; can&#39;t handle threads<br/> James E Keenan 1 file changed, 1 insertion(+)<br/> https://github.com/Perl/perl5/commit/5d7576a6ed24ecd8<br/><br/> Add Ryan Carsten Schmidt to AUTHORS file<br/> Ryan Carsten Schmidt 1 file changed, 1 insertion(+)<br/> https://github.com/Perl/perl5/commit/f5b140f3b87fe090<br/><br/> Resolve any symlinks to cwd in dylib install name<br/> Ryan Carsten Schmidt 1 file changed, 1 insertion(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/1f30e27f2871696d<br/><br/> Note when functions were first deprecated<br/> Karl Williamson 4 files changed, 20 insertions(+), 6 deletions(-<br/> https://github.com/Perl/perl5/commit/604d1d0444885ed2<br/><br/> Attempt to remove deprecated sv_locking/unlocking<br/> Karl Williamson 6 files changed, 3 insertions(+), 68 deletions(-<br/> https://github.com/Perl/perl5/commit/3afafdb6cda45b88<br/><br/> perl.h: include locale related headers after we decide to use locales<br/> Tony Cook 1 file changed, 9 insertions(+), 9 deletions(-)<br/> https://github.com/Perl/perl5/commit/bc5a3e960d095c85<br/><br/> op.c: factor out repeated entersub code<br/> Lukas Mai 1 file changed, 39 insertions(+), 27 deletions(-<br/> https://github.com/Perl/perl5/commit/404e37b805ecb843<br/><br/> perldelta for the 2-var &#39;for&#39; crash (#23405)<br/> Lukas Mai 1 file changed, 23 insertions(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/7aa27d7640d9bdff<br/><br/> perf/opcount.t: ensure imported builtins are optimized<br/> Lukas Mai 1 file changed, 124 insertions(+), 5 deletions(-<br/> https://github.com/Perl/perl5/commit/55ce815fbe0b4bd9<br/><br/> newFOROP: fix crash when optimizing 2-var for over builtin::indexed<br/> Lukas Mai 2 files changed, 24 insertions(+), 3 deletions(-<br/> https://github.com/Perl/perl5/commit/96673a4bb36a973a<br/><br/> regcomp_trie: stringify *tmp before accessing string fields<br/> Lukas Mai 1 file changed, 3 insertions(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/d83bd2549fce92d1<br/><br/>Current branch smoke-me/tonyc/22125-openbsd-embed<br/>3 commits. 1 unique author. 1 unique committer.<br/>561 files changed, 14646 insertions(+), 10580 deletions(-)<br/><br/>Snapshot: http://github.com/Perl/perl5/tarball/3e2c4b36ca1032ea<br/><br/> perldelta for fix embedding test on openbsd<br/> Tony Cook 1 file changed, 10 insertions(+)<br/> https://github.com/Perl/perl5/commit/3e2c4b36ca1032ea<br/><br/> openbsd: ensure we link to the built libperl.a, not the system libperl.a<br/> Tony Cook 1 file changed, 17 insertions(+), 4 deletions(-)<br/> https://github.com/Perl/perl5/commit/1f7d43dcf66c46e3<br/><br/> add API to test that libperl and the current executable are compatible<br/> Tony Cook 7 files changed, 72 insertions(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/f4362aa19b05fb4d<br/><br/>Martian commit 6f324ad9fffabd8f516a475f168e954d9be9c9df<br/>1 commit. 1 unique author. 1 unique committer.<br/><br/>Snapshot: http://github.com/Perl/perl5/tarball/6f324ad9fffabd8f<br/><br/> Revert &quot;Attempt to remove deprecated sv_locking/unlocking&quot;<br/> Karl Williamson 6 files changed, 68 insertions(+), 3 deletions(-<br/> https://github.com/Perl/perl5/commit/6f324ad9fffabd8f<br/><br/>Martian commit f84aec142de0fb5bcc37fee323755b9e5b1559ee<br/>2 commits. 1 unique author. 1 unique committer.<br/>Net code removal: HungryStackOf Pancakes (118599 lines)<br/><br/>Snapshot: http://github.com/Perl/perl5/tarball/f84aec142de0fb5b<br/><br/> Prune to all non-win32 README files and platform code for Windows ARM only<br/> HungryStackOf Pancakes 205 files changed, 118615 deletions(-)<br/> https://github.com/Perl/perl5/commit/f84aec142de0fb5b<br/><br/> Add Windows ARM64 support<br/> HungryStackOf Pancakes 30 files changed, 16 insertions(+), 10038 deleti<br/> https://github.com/Perl/perl5/commit/8fa8910e17bf6fe9<br/><br/>Martian commit a2d30e0c57349460e1189042377b406c4c5cbc3e<br/>1 commit. 1 unique author. 1 unique committer.<br/><br/>Snapshot: http://github.com/Perl/perl5/tarball/a2d30e0c57349460<br/><br/> Skip one test under miniperl; can&#39;t handle threads<br/> James E Keenan 1 file changed, 1 insertion(+)<br/> https://github.com/Perl/perl5/commit/a2d30e0c57349460<br/><br/>Martian commit 40ce3d5f6ecefb541ac468ab5da37798907335ef<br/>1 commit. 1 unique author. 1 unique committer.<br/><br/>Snapshot: http://github.com/Perl/perl5/tarball/40ce3d5f6ecefb54<br/><br/> Note when functions were first deprecated<br/> Karl Williamson 4 files changed, 20 insertions(+), 6 deletions(-<br/> https://github.com/Perl/perl5/commit/40ce3d5f6ecefb54<br/><br/>Martian commit cc1e873b9f0cd05da90a4c30a9aefb723a576ee8<br/>1 commit. 1 unique author. 1 unique committer.<br/><br/>Snapshot: http://github.com/Perl/perl5/tarball/cc1e873b9f0cd05d<br/><br/> Attempt to remove deprecated sv_locking/unlocking<br/> Karl Williamson 6 files changed, 3 insertions(+), 68 deletions(-<br/> https://github.com/Perl/perl5/commit/cc1e873b9f0cd05d<br/><br/>Martian commit 63844f08efcede56076ea6512de0eba7ccd53476<br/>2 commits. 1 unique author. 1 unique committer.<br/><br/>Snapshot: http://github.com/Perl/perl5/tarball/63844f08efcede56<br/><br/> Add Ryan Carsten Schmidt to AUTHORS file<br/> Ryan Carsten Schmidt 1 file changed, 1 insertion(+)<br/> https://github.com/Perl/perl5/commit/63844f08efcede56<br/><br/> Resolve any symlinks to cwd in dylib install name<br/> Ryan Carsten Schmidt 1 file changed, 1 insertion(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/f825d24a4c585a2f<br/><br/>Ignored 94 GitHub auto-generated merge commits<br/> https://www.nntp.perl.org/group/perl.perl5.porters/2025/07/msg270131.html Sat, 26 Jul 2025 03:05:41 +0000 Re: State of XSpp / C++ integration by Steffen Mueller Hi Johan, <br/> <br/>to be honest I just came across this email randomly because I peek at my <br/>p5p subscription every six months or so. Maybe that&#39;s already the answer to <br/>your question about support. I&#39;ve been largely away from Perl and OSS due <br/>to work &amp; family demands in the past decade. I took a quick look at a few <br/>of the outstanding issues and they seem to be largely either trivially <br/>fixable (eg. classic &quot;. not in @INC&quot;) or self-notes/feature requests. <br/> <br/>I&#39;d love to promise to help, but I&#39;ve become quite rusty and my time comes <br/>in random small increments. So while I&#39;d be happy to take a look at <br/>whatever you&#39;re running into, I&#39;m also leery of asking you to do a lot of <br/>work to explain the issues because I have low confidence in my usefulness. <br/> <br/>Mattia is the original author of ExtUtils::XSpp and wxPerl, so I&#39;m CCing <br/>him. Hi Mattia! Hope you&#39;re well! <br/> <br/>--Steffen <br/> <br/>On Tue, Jul 22, 2025 at 12:27&acirc;&#128;&macr;PM Johan Vromans &lt;[email protected]&gt; wrote: <br/> <br/>&gt; While trying to port wxPerl to a more recent version of wxWidgets I <br/>&gt; stumbled upon a number of XSpp issues that I find hard to solve. <br/>&gt; <br/>&gt; Before spending a lot of energy I would first like to ask if XSpp is still <br/>&gt; a viable toolchain for C++ embedding. It hasn&#39;t been updated for many years <br/>&gt; and has a load of old issues that have never looked at. <br/>&gt; <br/>&gt; If someone with practical XSpp experience would be able to provide some <br/>&gt; help I would welcome it. <br/>&gt; <br/>&gt; Thanks. <br/>&gt; <br/> https://www.nntp.perl.org/group/perl.perl5.porters/2025/07/msg270130.html Fri, 25 Jul 2025 12:14:38 +0000 Perl 5 Commit Summary by Perl 5 commit summary Perl 5 commit summary, activity since Saturday<br/><br/>Current branch blead<br/>37 commits. 8 unique authors. 8 unique committers.<br/>61 files changed, 1393 insertions(+), 1043 deletions(-)<br/>Thanks, applied: James E Keenan (1) Tony Cook (1)<br/>Snapshot: http://github.com/Perl/perl5/tarball/96784b083ca7e05f<br/><br/> win32_checkTLS(): nothing to do without at least multiplicity<br/> Tony Cook 1 file changed, 1 insertion(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/96784b083ca7e05f<br/><br/> win32_checkTLS: add a panic message and break into the debugger<br/> Tony Cook 1 file changed, 11 insertions(+)<br/> https://github.com/Perl/perl5/commit/0144414218630c60<br/><br/> win32_checkTLS: eliminate no longer used variable<br/> Tony Cook 1 file changed, 2 deletions(-)<br/> https://github.com/Perl/perl5/commit/43dfd9c1c1f6d33b<br/><br/> perldelta for Win32 -Dusethreads builds fix<br/> Tony Cook 1 file changed, 3 insertions(+), 2 deletions(-)<br/> https://github.com/Perl/perl5/commit/4a9179a6e6e60831<br/><br/> win32: build without threads but still with implicit sys<br/> Tony Cook 1 file changed, 8 insertions(+)<br/> https://github.com/Perl/perl5/commit/7b87a86b61a2855b<br/><br/> GH #23390 re/Makefile.PL silence uninit $args{&quot;LINKTYPE&quot;} warning<br/> Daniel Dragan 1 file changed, 3 insertions(+), 3 deletions(-)<br/> https://github.com/Perl/perl5/commit/872e7cbc2803403b<br/><br/> UCD.pm: Add check for parameter type<br/> Karl Williamson 7 files changed, 22 insertions(+), 7 deletions(-<br/> https://github.com/Perl/perl5/commit/ea25adf22cbf3d9a<br/><br/> perlre: Clarify wording<br/> Karl Williamson 1 file changed, 1 insertion(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/434c9cd5f17004da<br/><br/> perlop: Clarify empty pattern section not valid for qr//<br/> Karl Williamson 1 file changed, 3 insertions(+)<br/> https://github.com/Perl/perl5/commit/652110bce8cbe422<br/><br/> perl.h: Make sure USE_LOCALE is off if no locales available<br/> Karl Williamson 2 files changed, 5 insertions(+)<br/> https://github.com/Perl/perl5/commit/9054d08e4819d1f2<br/><br/> regen/locale.pl: Use &#39;USE_LOCALE&quot; not &#39;NO_LOCALE&#39;<br/> Karl Williamson 2 files changed, 15 insertions(+), 15 deletions(<br/> https://github.com/Perl/perl5/commit/03e269a3672fae76<br/><br/> Fix typo in epigraph for 5.43.1<br/> Steve Hay 1 file changed, 1 insertion(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/bbfbc490422f71c8<br/><br/> Add epigraphs for 5.38.5-RC1/5.40.3-RC1<br/> Steve Hay 1 file changed, 25 insertions(+)<br/> https://github.com/Perl/perl5/commit/ab34963a6d7d97b9<br/><br/> regen/embed.pl Use /xx to clarify regex<br/> Karl Williamson 1 file changed, 1 insertion(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/4d32d2c598ed4085<br/><br/> 5.38.5-RC1/5.40.3-RC1 today<br/> Steve Hay 1 file changed, 2 insertions(+)<br/> https://github.com/Perl/perl5/commit/93253b7b9371211f<br/><br/> Add 5.40.3 to release schedule<br/> Steve Hay 1 file changed, 1 insertion(+)<br/> https://github.com/Perl/perl5/commit/77413f095185658e<br/><br/> croak_xs_usage pod: remove unnecessary diag_listed_as<br/> Tony Cook 1 file changed, 1 insertion(+), 2 deletions(-)<br/> https://github.com/Perl/perl5/commit/63b30a217f0590c2<br/><br/> Prepare Module::Corelist for 5.43.2<br/> Richard Leach 3 files changed, 31 insertions(+), 2 deletions(-<br/> https://github.com/Perl/perl5/commit/2904b5b0342335f0<br/><br/> Bump the perl version in various places for 5.43.2<br/> Richard Leach 20 files changed, 124 insertions(+), 124 deletio<br/> https://github.com/Perl/perl5/commit/4a431cdfdca44f0d<br/><br/> Archive perldelta 5.43.1<br/> Richard Leach 10 files changed, 536 insertions(+), 84 deletion<br/> https://github.com/Perl/perl5/commit/a1ca12c1f6991b57<br/><br/> Update release_schedule.pod following 5.43.1 release<br/> Richard Leach 1 file changed, 1 insertion(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/cad4d402f55a5a60<br/><br/> Epigraph for 5.43.1<br/> Richard Leach 1 file changed, 11 insertions(+)<br/> https://github.com/Perl/perl5/commit/df1bffbbf477c356<br/><br/> Add new release to perlhist<br/> Richard Leach 1 file changed, 1 insertion(+)<br/> https://github.com/Perl/perl5/commit/89012989f3104d6b<br/><br/> Finalize perldelta for 5.43.1<br/> Richard Leach 1 file changed, 46 insertions(+), 326 deletions(<br/> https://github.com/Perl/perl5/commit/6cf1e366599aaf3f<br/><br/> Update Module::CoreList for 5.43.1<br/> Richard Leach 2 files changed, 6 insertions(+), 3 deletions(-)<br/> https://github.com/Perl/perl5/commit/25bed50932dd736e<br/><br/> Improve documentation of sv_dup and sv_dup_inc<br/> Leon Timmermans 1 file changed, 10 insertions(+), 10 deletions(-<br/> https://github.com/Perl/perl5/commit/83b32ab641017de8<br/><br/> Revert marking sv_dup and sv_dup_inc as core-only<br/> Leon Timmermans 1 file changed, 2 insertions(+), 2 deletions(-)<br/> https://github.com/Perl/perl5/commit/166fcd923517d162<br/><br/> cpan/experimental - Update to version 0.036<br/> Leon Timmermans 3 files changed, 21 insertions(+), 6 deletions(-<br/> https://github.com/Perl/perl5/commit/cf7cc0a627da2ab1<br/><br/> Convert uv_to_utf8_msgs() to a macro<br/> Karl Williamson 5 files changed, 10 insertions(+), 13 deletions(<br/> https://github.com/Perl/perl5/commit/9f64cab5b47dac7c<br/><br/> Allow automatic long name macro generation<br/> Karl Williamson 2 files changed, 34 insertions(+), 2 deletions(-<br/> https://github.com/Perl/perl5/commit/93f23f07eb96405f<br/><br/> Change #define Perl_foo Perl_bar&quot; to plain &quot;foo bar&quot;<br/> Karl Williamson 5 files changed, 45 insertions(+), 45 deletions(<br/> https://github.com/Perl/perl5/commit/6277a14c3a20e1c9<br/><br/> regen/embed.pl: Separate conditional into its own clause<br/> Karl Williamson 1 file changed, 7 insertions(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/763cee0e4c3df09d<br/><br/> regen/embed.pl: Expand tabs to blanks<br/> Karl Williamson 1 file changed, 15 insertions(+), 15 deletions(-<br/> https://github.com/Perl/perl5/commit/808719b4a26e583c<br/><br/> add missing releaser names<br/> Philippe Bruhat (BooK) 1 file changed, 2 insertions(+), 2 deletions(-)<br/> https://github.com/Perl/perl5/commit/48b684594b711eb2<br/><br/> remove duplicate consecutive releaser names<br/> Philippe Bruhat (BooK) 1 file changed, 119 insertions(+), 119 deletions<br/> https://github.com/Perl/perl5/commit/6d2e3b2b1a2fe4b2<br/><br/> reindent the whole perl history table<br/> Philippe Bruhat (BooK) 1 file changed, 754 insertions(+), 740 deletions<br/> https://github.com/Perl/perl5/commit/9fea74fc5b04f962<br/><br/> perldelta entry for ExtUtils::ParseXS work<br/> David Mitchell 1 file changed, 3 insertions(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/dae10d9a000cb3eb<br/><br/>Current branch maint-5.38<br/>81 commits. 6 unique authors. 1 unique committer.<br/>28 files changed, 1916 insertions(+), 1244 deletions(-)<br/>Thanks, applied: Steve Hay (68)<br/>Snapshot: http://github.com/Perl/perl5/tarball/b2a5a9dfa0810ab6<br/><br/> Fix typo in epigraph for 5.43.1<br/> Steve Hay 1 file changed, 1 insertion(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/b2a5a9dfa0810ab6<br/><br/> Add epigraphs for 5.38.5-RC1/5.40.3-RC1<br/> Steve Hay 1 file changed, 25 insertions(+)<br/> https://github.com/Perl/perl5/commit/c153240585b970da<br/><br/> Disarm patchlevel.h and regen META.json<br/> Steve Hay 2 files changed, 1 insertion(+), 2 deletions(-)<br/> https://github.com/Perl/perl5/commit/db49170007ffc1a6<br/><br/> Bump to RC1 and update META.json<br/> Steve Hay 2 files changed, 2 insertions(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/195905f9cb5b7b52<br/><br/> 5.38.5-RC1/5.40.3-RC1 today<br/> Steve Hay 1 file changed, 1 insertion(+)<br/> https://github.com/Perl/perl5/commit/a9e82d4af2faf156<br/><br/> Finalize perldelta<br/> Steve Hay 1 file changed, 24 insertions(+), 2 deletions(-)<br/> https://github.com/Perl/perl5/commit/38a99c32d3b2bd92<br/><br/> Add 5.40.3 to release schedule<br/> Steve Hay 1 file changed, 1 insertion(+)<br/> https://github.com/Perl/perl5/commit/6a778c2355d85fba<br/><br/> Update release_schedule.pod following 5.43.1 release<br/> Richard Leach 1 file changed, 1 insertion(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/b274abe21b704fb4<br/><br/> Epigraph for 5.43.1<br/> Richard Leach 1 file changed, 11 insertions(+)<br/> https://github.com/Perl/perl5/commit/3f04fa72877c1eb7<br/><br/> Add new release to perlhist<br/> Richard Leach 1 file changed, 1 insertion(+)<br/> https://github.com/Perl/perl5/commit/a6f3674851036cf3<br/><br/> Update Module::CoreList for 5.43.1<br/> Richard Leach 2 files changed, 6 insertions(+), 3 deletions(-)<br/> https://github.com/Perl/perl5/commit/bea7c06263655bfb<br/><br/> Add delta related to CVE-2025-40909<br/> Steve Hay 1 file changed, 12 insertions(+), 4 deletions(-)<br/> https://github.com/Perl/perl5/commit/84894d57c2006dad<br/><br/> perldelta: Update modules section, remove boilerplate, copy-editing<br/> Steve Hay 1 file changed, 16 insertions(+), 367 deletions(<br/> https://github.com/Perl/perl5/commit/5209daa1696fbe63<br/><br/> Update Module::CoreList with data so far for the imminent 5.38.5<br/> Steve Hay 3 files changed, 31 insertions(+), 2 deletions(-<br/> https://github.com/Perl/perl5/commit/3eaaaad74aba6ee3<br/><br/> Bump version to 5.38.5, ahead of its impending release<br/> Steve Hay 21 files changed, 112 insertions(+), 112 deletio<br/> https://github.com/Perl/perl5/commit/e227c9edc05a9100<br/><br/> add missing releaser names<br/> Philippe Bruhat (BooK) 1 file changed, 2 insertions(+), 2 deletions(-)<br/> https://github.com/Perl/perl5/commit/bafbfea9cf536ac1<br/><br/> remove duplicate consecutive releaser names<br/> Philippe Bruhat (BooK) 1 file changed, 119 insertions(+), 119 deletions<br/> https://github.com/Perl/perl5/commit/39c00cb0bc84e767<br/><br/> reindent the whole perl history table<br/> Philippe Bruhat (BooK) 1 file changed, 754 insertions(+), 740 deletions<br/> https://github.com/Perl/perl5/commit/4e092ac7fac2335a<br/><br/> perlhist: fix some little historical inaccuracies and ordering<br/> Thibault Duponchelle 1 file changed, 6 insertions(+), 6 deletions(-)<br/> https://github.com/Perl/perl5/commit/a8f0122d77d26bb4<br/><br/> update perlhist for 5.43.0<br/> Philippe Bruhat (BooK) 1 file changed, 2 insertions(+)<br/> https://github.com/Perl/perl5/commit/ea4cdaf4f3eb6e62<br/><br/> perlhist: Small update to selected release size for 5.42.0<br/> Thibault Duponchelle 1 file changed, 1 insertion(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/1a9733441e828f6d<br/><br/> perldelta/perlhist: small update of metrics<br/> Thibault Duponchelle 1 file changed, 1 insertion(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/8df120ec5f003af7<br/><br/> Update perlhist<br/> Thibault Duponchelle 1 file changed, 2 insertions(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/c5026eca99b4e464<br/><br/> Add 5.42.0 to perlhist<br/> Thibault Duponchelle 1 file changed, 1 insertion(+)<br/> https://github.com/Perl/perl5/commit/1add257b75da0708<br/><br/> Update perlhist with release size<br/> Thibault Duponchelle 1 file changed, 1 insertion(+)<br/> https://github.com/Perl/perl5/commit/8eae3094bd6b08f6<br/><br/> Add new release to perlhist<br/> Thibault Duponchelle 1 file changed, 1 insertion(+)<br/> https://github.com/Perl/perl5/commit/71a1b02889cd47ce<br/><br/> Update perlhist.pod<br/> Thibault Duponchelle 1 file changed, 2 insertions(+)<br/> https://github.com/Perl/perl5/commit/33aa757401e4c61c<br/><br/> Add new release to perlhist<br/> Philippe Bruhat (BooK) 1 file changed, 1 insertion(+)<br/> https://github.com/Perl/perl5/commit/22aca67be3b3f5b3<br/><br/> Add new release to perlhist<br/> Karen Etheridge 1 file changed, 1 insertion(+)<br/> https://github.com/Perl/perl5/commit/f30817c439ceaac7<br/><br/> Add new release to perlhist<br/> Karen Etheridge 1 file changed, 1 insertion(+)<br/> https://github.com/Perl/perl5/commit/0e6a6a07c9d342b0<br/><br/> epigraph for v5.42.0<br/> Philippe Bruhat (BooK) 1 file changed, 6 insertions(+)<br/> https://github.com/Perl/perl5/commit/9ec7e3915ce53884<br/><br/> Add epigraph for 5.42.0-RC3<br/> Thibault Duponchelle 1 file changed, 6 insertions(+)<br/> https://github.com/Perl/perl5/commit/a5229da5dc97e003<br/><br/> Add epigraph for 5.42.0-RC2<br/> Thibault Duponchelle 1 file changed, 6 insertions(+)<br/> https://github.com/Perl/perl5/commit/9ea70cd6ccf5a069<br/><br/> Add epigraph for 5.42.0-RC1<br/> Thibault Duponchelle 1 file changed, 7 insertions(+)<br/> https://github.com/Perl/perl5/commit/2658f0c0bb6a7f13<br/><br/> add epigraph for 5.41.13<br/> Philippe Bruhat (BooK) 1 file changed, 6 insertions(+)<br/> https://github.com/Perl/perl5/commit/71b72ea2df75d7a8<br/><br/> add 5.41.12 epigraph<br/> Karen Etheridge 1 file changed, 7 insertions(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/0a219c63570ba60d<br/><br/> add epigraph for 5.41.11<br/> Karen Etheridge 1 file changed, 8 insertions(+)<br/> https://github.com/Perl/perl5/commit/e0a7a1e1ecd6125e<br/><br/> release_schedule: Add a new victim<br/> Thibault Duponchelle 1 file changed, 1 insertion(+)<br/> https://github.com/Perl/perl5/commit/bb2beca25b04d408<br/><br/> volunteering for 5.43.3<br/> Philippe Bruhat (BooK) 1 file changed, 1 insertion(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/5c62bbf426cda1d6<br/><br/> release_schedule: Add release manager to 5.43.6<br/> Thibault Duponchelle 1 file changed, 1 insertion(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/9744341037ce58de<br/><br/> release_schedule: normalize release manager to the common practice<br/> Thibault Duponchelle 1 file changed, 5 insertions(+), 5 deletions(-)<br/> https://github.com/Perl/perl5/commit/aeac8405006c3eb9<br/><br/> release_schedule: Add release manager to 5.43.4<br/> Thibault Duponchelle 1 file changed, 1 insertion(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/c82d0a23fa2995b2<br/><br/> I volunteer as tribute<br/> Karen Etheridge 1 file changed, 1 insertion(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/78f41d2803fd7151<br/><br/> release_schedule: Tick 5.43.0 - Add release manager to 5.43.1, 5.43.5, 5.43.<br/> Thibault Duponchelle 1 file changed, 4 insertions(+), 4 deletions(-)<br/> https://github.com/Perl/perl5/commit/3ded3aa9597bcc91<br/><br/> release_schedule: 5.44 in 2026<br/> Thibault Duponchelle 1 file changed, 1 insertion(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/7392d54f57fc3936<br/><br/> Add future 5.44.0 to schedule<br/> Thibault Duponchelle 1 file changed, 4 insertions(+)<br/> https://github.com/Perl/perl5/commit/3ee04d2dda4b0e6c<br/><br/> new release schedule for the v5.43 series<br/> Philippe Bruhat (BooK) 1 file changed, 15 insertions(+), 24 deletions(-<br/> https://github.com/Perl/perl5/commit/2edcfdf4d5471705<br/><br/> add 5.41.13 to release history<br/> Karen Etheridge 1 file changed, 2 insertions(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/47bff22bd3cc0da9<br/><br/> tick off the release<br/> Karen Etheridge 1 file changed, 1 insertion(+)<br/> https://github.com/Perl/perl5/commit/2d41c44a50732124<br/><br/> tick off 5.41.11 release<br/> Karen Etheridge 1 file changed, 1 insertion(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/234508ecd6edb53e<br/><br/> improve the GitHub links regexp in the RMG<br/> Philippe Bruhat (BooK) 1 file changed, 1 insertion(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/213b86fdce56c46c<br/><br/> RMG: be more explicit about Perl Releasers team requirement<br/> Lukas Mai 1 file changed, 11 insertions(+), 8 deletions(-)<br/> https://github.com/Perl/perl5/commit/5bcd768c493925f1<br/><br/> RMG - For commit message related to preparation of Module::Corelist for next<br/> Thibault Duponchelle 1 file changed, 1 insertion(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/43bb2cf50121b6cf<br/><br/> RMG - Run perlivp in install path<br/> Thibault Duponchelle 1 file changed, 3 insertions(+), 2 deletions(-)<br/> https://github.com/Perl/perl5/commit/d97210670f7e3be3<br/><br/> RMG - Edit commit message for step of archiving perldelta<br/> Thibault Duponchelle 1 file changed, 1 insertion(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/ea8212101f03b269<br/><br/> Porting/release_managers_guide.pod: document version placeholders<br/> Lukas Mai 1 file changed, 29 insertions(+)<br/> https://github.com/Perl/perl5/commit/c47ea663fb7b5a28<br/><br/> Fix merge error<br/> Steve Hay 1 file changed, 1 insertion(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/014c1fb047d91df4<br/><br/> Replace placeholder of Module::CoreList release date for 5.43.1<br/> Thibault Duponchelle 1 file changed, 1 insertion(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/14c73a3eec36cdc6<br/><br/> Module::CoreList version will be 5.20250720<br/> Thibault Duponchelle 3 files changed, 8 insertions(+), 3 deletions(-)<br/> https://github.com/Perl/perl5/commit/558b232b15f75f99<br/><br/> Prepare Module::CoreList for 5.43.1<br/> Thibault Duponchelle 2 files changed, 309 insertions(+)<br/> https://github.com/Perl/perl5/commit/47c7c279da070c6a<br/><br/> Update Module::CoreList for 5.43.0<br/> Thibault Duponchelle 1 file changed, 15 insertions(+), 3 deletions(-)<br/> https://github.com/Perl/perl5/commit/5aacab020a0eab5b<br/><br/> prepare Module::CoreList for perl 5.43.0<br/> Philippe Bruhat (BooK) 3 files changed, 8 insertions(+), 2 deletions(-)<br/> https://github.com/Perl/perl5/commit/b2ff80e6ac171952<br/><br/> prepare Module::CoreList for 5.43.0<br/> Philippe Bruhat (BooK) 2 files changed, 20 insertions(+), 2 deletions(-<br/> https://github.com/Perl/perl5/commit/6cc753a7d46f8273<br/><br/> Update Module::CoreList for 5.42.0-RC3<br/> Thibault Duponchelle 1 file changed, 1 insertion(+)<br/> https://github.com/Perl/perl5/commit/193cf18bd42e3c3d<br/><br/> Update Module::CoreList for 5.42.0<br/> Thibault Duponchelle 1 file changed, 1 insertion(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/3e3fde573f5f4cda<br/><br/> Update Module::CoreList for 5.42.0<br/> Thibault Duponchelle 3 files changed, 5 insertions(+), 5 deletions(-)<br/> https://github.com/Perl/perl5/commit/b1b8549688632fd2<br/><br/> Update Module::CoreList for 5.42.0 after fix in ExtUtils::CBuilder and doc u<br/> Thibault Duponchelle 1 file changed, 15 insertions(+)<br/> https://github.com/Perl/perl5/commit/247f99982a7932d8<br/><br/> Update Module::CoreList version<br/> Thibault Duponchelle 3 files changed, 6 insertions(+), 6 deletions(-)<br/> https://github.com/Perl/perl5/commit/91287c3282b70e5d<br/><br/> Remove the removal of unicore::Name from Module::CoreList 5.41.13<br/> Thibault Duponchelle 1 file changed, 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/1f381dcd6ca6a5a2<br/><br/> Update Module::CoreList version to actual RC1 date<br/> Thibault Duponchelle 3 files changed, 6 insertions(+), 6 deletions(-)<br/> https://github.com/Perl/perl5/commit/037bbfb91eb18af2<br/><br/> Update Module::CoreList Changes<br/> Thibault Duponchelle 1 file changed, 1 insertion(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/6f7baffcc44a1bc8<br/><br/> Update Module::CoreList for 5.42.0-RC1. Regen Op_private. Update META.json<br/> Thibault Duponchelle 2 files changed, 7 insertions(+), 6 deletions(-)<br/> https://github.com/Perl/perl5/commit/e8164e571f78efac<br/><br/> Update Module::CoreList for 5.41.14<br/> Philippe Bruhat (BooK) 3 files changed, 31 insertions(+), 2 deletions(-<br/> https://github.com/Perl/perl5/commit/f94b668600256627<br/><br/> Update Module::CoreList for 5.41.13<br/> Philippe Bruhat (BooK) 3 files changed, 65 insertions(+), 8 deletions(-<br/> https://github.com/Perl/perl5/commit/eed56b2a642b80e5<br/><br/> Update Module::CoreList for 5.41.13<br/> Karen Etheridge 3 files changed, 32 insertions(+), 3 deletions(-<br/> https://github.com/Perl/perl5/commit/c910f1e314e4fdaf<br/><br/> Update Module::CoreList for 5.41.12<br/> Karen Etheridge 3 files changed, 3 insertions(+), 3 deletions(-)<br/> https://github.com/Perl/perl5/commit/972e7b1698d696f8<br/><br/> Unicode 16.0.0 was actually added in 5.41.11<br/> Karen Etheridge 1 file changed, 1 insertion(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/37d262ab63320793<br/><br/> Update Module::CoreList for 5.41.12<br/> Karen Etheridge 3 files changed, 30 insertions(+), 2 deletions(-<br/> https://github.com/Perl/perl5/commit/318c37bc22f2f29d<br/><br/> Update Module::CoreList for 5.41.11<br/> Karen Etheridge 3 files changed, 263 insertions(+), 4 deletions(<br/> https://github.com/Perl/perl5/commit/6ea33a50e0dd1bef<br/><br/> Update Module-CoreList with data for 5.38.4/5.40.2<br/> Steve Hay 3 files changed, 29 insertions(+)<br/> https://github.com/Perl/perl5/commit/6e5ed5f5d15a7e94<br/><br/> Prepare Module::Corelist for 5.41.11<br/> Lukas Mai 2 files changed, 24 insertions(+)<br/> https://github.com/Perl/perl5/commit/8d2a763e7ed49476<br/><br/>Current branch maint-5.40<br/>81 commits. 6 unique authors. 1 unique committer.<br/>31 files changed, 2034 insertions(+), 1243 deletions(-)<br/>Thanks, applied: Steve Hay (68)<br/>Snapshot: http://github.com/Perl/perl5/tarball/ca8b3320a147ff9e<br/><br/> Fix typo in epigraph for 5.43.1<br/> Steve Hay 1 file changed, 1 insertion(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/ca8b3320a147ff9e<br/><br/> Add epigraphs for 5.38.5-RC1/5.40.3-RC1<br/> Steve Hay 1 file changed, 25 insertions(+)<br/> https://github.com/Perl/perl5/commit/29d24b1fc61b9d9d<br/><br/> Disarm patchlevel.h and regen META.json<br/> Steve Hay 2 files changed, 1 insertion(+), 2 deletions(-)<br/> https://github.com/Perl/perl5/commit/60d4710b863b9022<br/><br/> Bump to RC1 and update META.json<br/> Steve Hay 2 files changed, 2 insertions(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/57d9c1bc123e937a<br/><br/> 5.38.5-RC1/5.40.3-RC1 today<br/> Steve Hay 1 file changed, 1 insertion(+)<br/> https://github.com/Perl/perl5/commit/16115e3dd33a1748<br/><br/> Finalize perldelta<br/> Steve Hay 1 file changed, 24 insertions(+), 2 deletions(-)<br/> https://github.com/Perl/perl5/commit/768fb243dd16fbe3<br/><br/> Add 5.40.3 to release schedule<br/> Steve Hay 1 file changed, 1 insertion(+)<br/> https://github.com/Perl/perl5/commit/a575be635479a854<br/><br/> Update release_schedule.pod following 5.43.1 release<br/> Richard Leach 1 file changed, 1 insertion(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/f0661ba866efb9de<br/><br/> Epigraph for 5.43.1<br/> Richard Leach 1 file changed, 11 insertions(+)<br/> https://github.com/Perl/perl5/commit/025bc7016bc7cc43<br/><br/> Add new release to perlhist<br/> Richard Leach 1 file changed, 1 insertion(+)<br/> https://github.com/Perl/perl5/commit/a8c8f3e5b853faa2<br/><br/> Update Module::CoreList for 5.43.1<br/> Richard Leach 2 files changed, 6 insertions(+), 3 deletions(-)<br/> https://github.com/Perl/perl5/commit/cc70981d343f93e3<br/><br/> Add delta related to CVE-2025-40909<br/> Steve Hay 1 file changed, 12 insertions(+), 4 deletions(-)<br/> https://github.com/Perl/perl5/commit/79bcc385c433af3c<br/><br/> Import perl5384delta.pod<br/> Steve Hay 4 files changed, 119 insertions(+)<br/> https://github.com/Perl/perl5/commit/6a90bc1f78b64d05<br/><br/> perldelta: Update modules section, remove boilerplate, copy-editing<br/> Steve Hay 1 file changed, 16 insertions(+), 367 deletions(<br/> https://github.com/Perl/perl5/commit/d57f2a6b562d4370<br/><br/> Update Module::CoreList with data so far for the imminent 5.40.3<br/> Steve Hay 3 files changed, 31 insertions(+), 2 deletions(-<br/> https://github.com/Perl/perl5/commit/6786f7b2129445db<br/><br/> Bump version to 5.40.3, ahead of its impending release<br/> Steve Hay 20 files changed, 111 insertions(+), 111 deletio<br/> https://github.com/Perl/perl5/commit/9bd367d4eb6f24b5<br/><br/> add missing releaser names<br/> Philippe Bruhat (BooK) 1 file changed, 2 insertions(+), 2 deletions(-)<br/> https://github.com/Perl/perl5/commit/167e8f3024ae7425<br/><br/> remove duplicate consecutive releaser names<br/> Philippe Bruhat (BooK) 1 file changed, 119 insertions(+), 119 deletions<br/> https://github.com/Perl/perl5/commit/89837aa96ce277f3<br/><br/> reindent the whole perl history table<br/> Philippe Bruhat (BooK) 1 file changed, 754 insertions(+), 740 deletions<br/> https://github.com/Perl/perl5/commit/b90936c81c75a946<br/><br/> perlhist: fix some little historical inaccuracies and ordering<br/> Thibault Duponchelle 1 file changed, 6 insertions(+), 6 deletions(-)<br/> https://github.com/Perl/perl5/commit/65a8edfd789a46a2<br/><br/> update perlhist for 5.43.0<br/> Philippe Bruhat (BooK) 1 file changed, 2 insertions(+)<br/> https://github.com/Perl/perl5/commit/76a163725b569dde<br/><br/> perlhist: Small update to selected release size for 5.42.0<br/> Thibault Duponchelle 1 file changed, 1 insertion(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/0b2e5acd63d4e376<br/><br/> perldelta/perlhist: small update of metrics<br/> Thibault Duponchelle 1 file changed, 1 insertion(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/2a29f78a2cb65570<br/><br/> Update perlhist<br/> Thibault Duponchelle 1 file changed, 2 insertions(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/7bfe9bd2ab996f7f<br/><br/> Add 5.42.0 to perlhist<br/> Thibault Duponchelle 1 file changed, 1 insertion(+)<br/> https://github.com/Perl/perl5/commit/73706e61aec22f71<br/><br/> Update perlhist with release size<br/> Thibault Duponchelle 1 file changed, 1 insertion(+)<br/> https://github.com/Perl/perl5/commit/7f4802ab7568270e<br/><br/> Add new release to perlhist<br/> Thibault Duponchelle 1 file changed, 1 insertion(+)<br/> https://github.com/Perl/perl5/commit/a887b19f6694430d<br/><br/> Update perlhist.pod<br/> Thibault Duponchelle 1 file changed, 2 insertions(+)<br/> https://github.com/Perl/perl5/commit/14c1fbf95dee17ca<br/><br/> Add new release to perlhist<br/> Philippe Bruhat (BooK) 1 file changed, 1 insertion(+)<br/> https://github.com/Perl/perl5/commit/b669c637ea61a8b3<br/><br/> Add new release to perlhist<br/> Karen Etheridge 1 file changed, 1 insertion(+)<br/> https://github.com/Perl/perl5/commit/f977f54c9e11283e<br/><br/> Add new release to perlhist<br/> Karen Etheridge 1 file changed, 1 insertion(+)<br/> https://github.com/Perl/perl5/commit/6198ae6bfa5aa635<br/><br/> epigraph for v5.42.0<br/> Philippe Bruhat (BooK) 1 file changed, 6 insertions(+)<br/> https://github.com/Perl/perl5/commit/e3b2c96d89f3c5eb<br/><br/> Add epigraph for 5.42.0-RC3<br/> Thibault Duponchelle 1 file changed, 6 insertions(+)<br/> https://github.com/Perl/perl5/commit/3c6308ad1c8d828b<br/><br/> Add epigraph for 5.42.0-RC2<br/> Thibault Duponchelle 1 file changed, 6 insertions(+)<br/> https://github.com/Perl/perl5/commit/9bb7787554d85b43<br/><br/> Add epigraph for 5.42.0-RC1<br/> Thibault Duponchelle 1 file changed, 7 insertions(+)<br/> https://github.com/Perl/perl5/commit/656981c4df0881a4<br/><br/> add epigraph for 5.41.13<br/> Philippe Bruhat (BooK) 1 file changed, 6 insertions(+)<br/> https://github.com/Perl/perl5/commit/9f1340e21a00b52b<br/><br/> add 5.41.12 epigraph<br/> Karen Etheridge 1 file changed, 7 insertions(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/01d00b8f596e0ee4<br/><br/> add epigraph for 5.41.11<br/> Karen Etheridge 1 file changed, 8 insertions(+)<br/> https://github.com/Perl/perl5/commit/9aac9b08140bdffb<br/><br/> release_schedule: Add a new victim<br/> Thibault Duponchelle 1 file changed, 1 insertion(+)<br/> https://github.com/Perl/perl5/commit/6845ff6c6b34f164<br/><br/> volunteering for 5.43.3<br/> Philippe Bruhat (BooK) 1 file changed, 1 insertion(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/367669c356abd88b<br/><br/> release_schedule: Add release manager to 5.43.6<br/> Thibault Duponchelle 1 file changed, 1 insertion(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/7b8702e84790bb9e<br/><br/> release_schedule: normalize release manager to the common practice<br/> Thibault Duponchelle 1 file changed, 5 insertions(+), 5 deletions(-)<br/> https://github.com/Perl/perl5/commit/e933573795b6e0e6<br/><br/> release_schedule: Add release manager to 5.43.4<br/> Thibault Duponchelle 1 file changed, 1 insertion(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/552da45f87324d3c<br/><br/> I volunteer as tribute<br/> Karen Etheridge 1 file changed, 1 insertion(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/9fdf6c22303e6db4<br/><br/> release_schedule: Tick 5.43.0 - Add release manager to 5.43.1, 5.43.5, 5.43.<br/> Thibault Duponchelle 1 file changed, 4 insertions(+), 4 deletions(-)<br/> https://github.com/Perl/perl5/commit/0df157460539752c<br/><br/> release_schedule: 5.44 in 2026<br/> Thibault Duponchelle 1 file changed, 1 insertion(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/04dbda0b550953d6<br/><br/> Add future 5.44.0 to schedule<br/> Thibault Duponchelle 1 file changed, 4 insertions(+)<br/> https://github.com/Perl/perl5/commit/2a7adb131e82f0e4<br/><br/> new release schedule for the v5.43 series<br/> Philippe Bruhat (BooK) 1 file changed, 15 insertions(+), 24 deletions(-<br/> https://github.com/Perl/perl5/commit/a2d088fb0453c043<br/><br/> add 5.41.13 to release history<br/> Karen Etheridge 1 file changed, 2 insertions(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/1e5f4dd5ec0fa61b<br/><br/> tick off the release<br/> Karen Etheridge 1 file changed, 1 insertion(+)<br/> https://github.com/Perl/perl5/commit/9499e2073dd049ab<br/><br/> tick off 5.41.11 release<br/> Karen Etheridge 1 file changed, 1 insertion(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/975f2309b49d9036<br/><br/> improve the GitHub links regexp in the RMG<br/> Philippe Bruhat (BooK) 1 file changed, 1 insertion(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/07120f5d407cec0d<br/><br/> RMG: be more explicit about Perl Releasers team requirement<br/> Lukas Mai 1 file changed, 11 insertions(+), 8 deletions(-)<br/> https://github.com/Perl/perl5/commit/767937c8806998d1<br/><br/> RMG - For commit message related to preparation of Module::Corelist for next<br/> Thibault Duponchelle 1 file changed, 1 insertion(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/419b06fe3b8ad549<br/><br/> RMG - Run perlivp in install path<br/> Thibault Duponchelle 1 file changed, 3 insertions(+), 2 deletions(-)<br/> https://github.com/Perl/perl5/commit/2ce6be322e403e50<br/><br/> RMG - Edit commit message for step of archiving perldelta<br/> Thibault Duponchelle 1 file changed, 1 insertion(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/51fa8c41eb91ad58<br/><br/> Porting/release_managers_guide.pod: document version placeholders<br/> Lukas Mai 1 file changed, 29 insertions(+)<br/> https://github.com/Perl/perl5/commit/02165875d93b678f<br/><br/> Replace placeholder of Module::CoreList release date for 5.43.1<br/> Thibault Duponchelle 1 file changed, 1 insertion(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/a5194daa715891b1<br/><br/> Module::CoreList version will be 5.20250720<br/> Thibault Duponchelle 3 files changed, 8 insertions(+), 3 deletions(-)<br/> https://github.com/Perl/perl5/commit/ed4d83668e975666<br/><br/> Prepare Module::CoreList for 5.43.1<br/> Thibault Duponchelle 2 files changed, 309 insertions(+)<br/> https://github.com/Perl/perl5/commit/a8b84cbf3e0d9c7f<br/><br/> Update Module::CoreList for 5.43.0<br/> Thibault Duponchelle 1 file changed, 15 insertions(+), 3 deletions(-)<br/> https://github.com/Perl/perl5/commit/5010f514fd4b6885<br/><br/> prepare Module::CoreList for perl 5.43.0<br/> Philippe Bruhat (BooK) 3 files changed, 8 insertions(+), 2 deletions(-)<br/> https://github.com/Perl/perl5/commit/b4c92023fb466700<br/><br/> prepare Module::CoreList for 5.43.0<br/> Philippe Bruhat (BooK) 2 files changed, 20 insertions(+), 2 deletions(-<br/> https://github.com/Perl/perl5/commit/1bd39f7ca6b0bc8b<br/><br/> Update Module::CoreList for 5.42.0-RC3<br/> Thibault Duponchelle 1 file changed, 1 insertion(+)<br/> https://github.com/Perl/perl5/commit/886a8a842455194f<br/><br/> Update Module::CoreList for 5.42.0<br/> Thibault Duponchelle 1 file changed, 1 insertion(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/e86142504f962452<br/><br/> Update Module::CoreList for 5.42.0<br/> Thibault Duponchelle 3 files changed, 5 insertions(+), 5 deletions(-)<br/> https://github.com/Perl/perl5/commit/535cb3c9d8d5701a<br/><br/> Update Module::CoreList for 5.42.0 after fix in ExtUtils::CBuilder and doc u<br/> Thibault Duponchelle 1 file changed, 15 insertions(+)<br/> https://github.com/Perl/perl5/commit/4eb6e6ccbb7c01cb<br/><br/> Update Module::CoreList version<br/> Thibault Duponchelle 3 files changed, 6 insertions(+), 6 deletions(-)<br/> https://github.com/Perl/perl5/commit/b5621d6255daecca<br/><br/> Remove the removal of unicore::Name from Module::CoreList 5.41.13<br/> Thibault Duponchelle 1 file changed, 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/82747f198a96f8a2<br/><br/> Update Module::CoreList version to actual RC1 date<br/> Thibault Duponchelle 3 files changed, 6 insertions(+), 6 deletions(-)<br/> https://github.com/Perl/perl5/commit/e59833de4e03359f<br/><br/> Update Module::CoreList Changes<br/> Thibault Duponchelle 1 file changed, 1 insertion(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/d2eb7c84e9417d67<br/><br/> Update Module::CoreList for 5.42.0-RC1. Regen Op_private. Update META.json<br/> Thibault Duponchelle 2 files changed, 7 insertions(+), 6 deletions(-)<br/> https://github.com/Perl/perl5/commit/042bec5f3eb12d56<br/><br/> Update Module::CoreList for 5.41.14<br/> Philippe Bruhat (BooK) 3 files changed, 31 insertions(+), 2 deletions(-<br/> https://github.com/Perl/perl5/commit/616bae77834f23c0<br/><br/> Update Module::CoreList for 5.41.13<br/> Philippe Bruhat (BooK) 3 files changed, 65 insertions(+), 8 deletions(-<br/> https://github.com/Perl/perl5/commit/4174744e8dfe484b<br/><br/> Update Module::CoreList for 5.41.13<br/> Karen Etheridge 3 files changed, 32 insertions(+), 3 deletions(-<br/> https://github.com/Perl/perl5/commit/00e92f261842b076<br/><br/> Update Module::CoreList for 5.41.12<br/> Karen Etheridge 3 files changed, 3 insertions(+), 3 deletions(-)<br/> https://github.com/Perl/perl5/commit/a4533fb56ce9df0a<br/><br/> Unicode 16.0.0 was actually added in 5.41.11<br/> Karen Etheridge 1 file changed, 1 insertion(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/d11a98c5859da817<br/><br/> Update Module::CoreList for 5.41.12<br/> Karen Etheridge 3 files changed, 30 insertions(+), 2 deletions(-<br/> https://github.com/Perl/perl5/commit/ac2bb7f9e9769781<br/><br/> Update Module::CoreList for 5.41.11<br/> Karen Etheridge 3 files changed, 263 insertions(+), 4 deletions(<br/> https://github.com/Perl/perl5/commit/d6c83a7497aace53<br/><br/> Update Module-CoreList with data for 5.38.4/5.40.2<br/> Steve Hay 3 files changed, 29 insertions(+)<br/> https://github.com/Perl/perl5/commit/9a58914b744b7874<br/><br/> Prepare Module::Corelist for 5.41.11<br/> Lukas Mai 2 files changed, 24 insertions(+)<br/> https://github.com/Perl/perl5/commit/757c2bf2ec268d71<br/><br/>New branch sv_dup_doc_fixes<br/>2 commits. 1 unique author. 1 unique committer.<br/><br/>Snapshot: http://github.com/Perl/perl5/tarball/d7a4c9f2592f6bad<br/><br/> Improve documentation of sv_dup and sv_dup_inc<br/> Leon Timmermans 1 file changed, 10 insertions(+), 10 deletions(-<br/> https://github.com/Perl/perl5/commit/d7a4c9f2592f6bad<br/><br/> Revert marking sv_dup and sv_dup_inc as core-only<br/> Leon Timmermans 1 file changed, 2 insertions(+), 2 deletions(-)<br/> https://github.com/Perl/perl5/commit/a8ce676243573e3e<br/><br/>Deleted branch davem/xsdelta<br/><br/>Deleted branch smoke-me/jkeenan/cpan-socket-synch-20250704<br/><br/>Deleted branch smoke-me/jkeenan/experimental-sync-with-cpan-20250501<br/><br/>Deleted branch smoke-me/jkeenan/sync-math-bigint-20250413-4<br/><br/>Deleted branch smoke-me/jkeenan/sync-pod-simple-20250523<br/><br/>Martian commit ab3f47b8fbe075082aed1bbd5e82608409df0dab<br/>1 commit. 1 unique author. 1 unique committer.<br/><br/>Snapshot: http://github.com/Perl/perl5/tarball/ab3f47b8fbe07508<br/><br/> UCD.pm: Add check for parameter type<br/> Karl Williamson 7 files changed, 22 insertions(+), 7 deletions(-<br/> https://github.com/Perl/perl5/commit/ab3f47b8fbe07508<br/><br/>Martian commit 3a88cfc24c0cd92ec3849b337287670e0bd55cf0<br/>1 commit. 1 unique author. 1 unique committer.<br/><br/>Snapshot: http://github.com/Perl/perl5/tarball/3a88cfc24c0cd92e<br/><br/> regen/embed.pl Use /xx to clarify regex<br/> Karl Williamson 1 file changed, 1 insertion(+), 1 deletion(-)<br/> https://github.com/Perl/perl5/commit/3a88cfc24c0cd92e<br/><br/>Martian commit 40a06973c4b5c541a716e34aedfe88a1995cd361<br/>1 commit. 1 unique author. 1 unique committer.<br/>Thanks, applied: GitHub (1)<br/>Snapshot: http://github.com/Perl/perl5/tarball/40a06973c4b5c541<br/><br/> Merge branch &#39;blead&#39; into auto_full_name<br/> Karl Williamson 2 parents<br/> https://github.com/Perl/perl5/commit/40a06973c4b5c541<br/><br/>Ignored 98 GitHub auto-generated merge commits<br/> https://www.nntp.perl.org/group/perl.perl5.porters/2025/07/msg270129.html Wed, 23 Jul 2025 03:11:56 +0000 Re: How do I configure so as to exclude '-lpthread' from 'libs' and'perllibs' in 'perl -V'? by James E Keenan On 7/22/25 08:45, Craig A. Berry wrote:<br/>&gt; On Sat, Jul 19, 2025 at 6:00&#x202F;PM James E Keenan &lt;[email protected]&gt; wrote:<br/>&gt; <br/>&gt;&gt; To repeat, the focus of this message is to learn what switches I would<br/>&gt;&gt; supply to |./Configure| so as to *not* have |-lpthread| appear in |libs|<br/>&gt;&gt; or |perllibs|.<br/>&gt; <br/>&gt; Have you tried clobbering libswanted with only the values you want to<br/>&gt; have end up in libs? E.g.,<br/>&gt; <br/>&gt; -A define:libswanted=&#39;dl m crypt util&#39;<br/>&gt; <br/>&gt; Not sure it will give you what you want, and it doesn&#39;t make sense to<br/>&gt; me to tell the linker to use a library (via ldflags) that you have<br/>&gt; otherwise asserted you don&#39;t have, but that does seem to be what you<br/>&gt; are asking for.<br/><br/>Craig, thanks for looking into this.<br/><br/>My first attempt at implementing your suggestion had ./Configure barfing <br/>very quickly:<br/>#####<br/>sh ./Configure -des -Dusedevel \<br/> -Duseithreads \<br/> -Doptimize=&quot;-O2 -pipe -fstack-protector-strong -fno-strict-aliasing&quot; \<br/> -A define:libs=&#39;dl m crypt util&#39; \<br/> -A define:perllibs=&#39;dl m crypt util&#39; \<br/> &amp;&amp; make test_prep<br/><br/>Checking your choice of C compiler and flags for coherency...<br/>I&#39;ve tried to compile and run the following simple program:<br/><br/>#include &lt;stdio.h&gt;<br/>int main() { printf(&quot;Ok\n&quot;); return(0); }<br/><br/>I used the command:<br/><br/> cc -o try -O2 -pipe -fstack-protector-strong -fno-strict-aliasing <br/>-DHAS_FPSETMASK -DHAS_FLOATINGPOINT_H -DNO_POSIX_2008_LOCALE <br/>-fno-strict-aliasing -pipe -fstack-protector-strong -I/usr/local/include <br/>-pthread -Wl,-E -fstack-protector-strong -L/usr/local/lib try.c dl m <br/>crypt util<br/> ./try<br/><br/>and I got the following output:<br/><br/>cc: error: no such file or directory: &#39;dl&#39;<br/>cc: error: no such file or directory: &#39;m&#39;<br/>cc: error: no such file or directory: &#39;crypt&#39;<br/>cc: error: no such file or directory: &#39;util&#39;<br/>I can&#39;t compile the test program.<br/>You have a BIG problem. Shall I abort Configure [y]<br/>Ok. Stopping Configure.<br/>#####<br/><br/>I then added &#39;-l&#39; to each of the libraries in the value strings for <br/>&#39;libs&#39; and &#39;perllibs&#39;.<br/><br/>##########<br/><br/>sh ./Configure -des -Dusedevel \<br/> -Duseithreads \<br/> -Doptimize=&quot;-O2 -pipe -fstack-protector-strong -fno-strict-aliasing&quot; \<br/> -A define:libs=&#39;-ldl -lm -lcrypt -lutil&#39; \<br/> -A define:perllibs=&#39;-ldl -lm -lcrypt -lutil&#39; \<br/> &amp;&amp; make test_prep<br/><br/>$ ./perl -Ilib -V<br/>Summary of my perl5 (revision 5 version 43 subversion 1) configuration:<br/> Commit id: 89012989f3104d6b9f30be98d2060b806df0f95e<br/> Platform:<br/> osname=freebsd<br/> osvers=14.2-release-p1<br/> archname=amd64-freebsd-thread-multi<br/> uname=&#39;freebsd perlmonger.nycbug.org 14.2-release-p1 freebsd <br/>14.2-release-p1 generic amd64 &#39;<br/> config_args=&#39;-des -Dusedevel -Duseithreads -Doptimize=-O2 -pipe <br/>-fstack-protector-strong -fno-strict-aliasing -A define:libs=-ldl -lm <br/>-lcrypt -lutil -A define:perllibs=-ldl -lm -lcrypt -lutil&#39;<br/>...<br/> useithreads=define<br/>...<br/> Linker and Libraries:<br/>...<br/> ldflags =&#39;-pthread -Wl,-E -fstack-protector-strong -L/usr/local/lib&#39;<br/>...<br/> libs=-ldl -lm -lcrypt -lutil<br/> perllibs=-ldl -lm -lcrypt -lutil<br/>...<br/>#####<br/><br/>So, one *can* configure so that `-lpthread` does not appear in `libs` or <br/>`perllibs`. I personally don&#39;t want to do that, but it *may* explain <br/>the curious `perl -V` entries we&#39;re seeing in the vendor perl on <br/>FreeBSD. Thanks again for your investigation.<br/><br/> https://www.nntp.perl.org/group/perl.perl5.porters/2025/07/msg270128.html Tue, 22 Jul 2025 23:01:36 +0000 Re: New XS features? by Michael Conrad On 7/20/25 5:36 AM, Dave Mitchell wrote:<br/>&gt;&gt;&gt; Secondly, as a way of quickly creating a wrapper for a C library by<br/>&gt;&gt;&gt; parsing its .h file: should we still be recommending this?<br/>&gt;&gt; I&#39;m not sure it&#39;s working well enough for that. Possibly we should try<br/>&gt;&gt; it on a bunch of them and see what it produces.<br/>&gt; For our readers: has anyone following this thread ever successfully used<br/>&gt; h2xs to generate a basic .xs file from a C header file for some library?<br/>&gt;<br/>&gt; If it turns out that h2xs is no longer up to the job, should be just<br/>&gt; drop all mention of it in the XS docs apart from creating an empty<br/>&gt; skeleton distro?<br/><br/>I got my feet wet with XS starting with Inline::C (around 2015). I used <br/>that happily in my local projects before deciding to make some of it <br/>into a CPAN module (around 2017) when I learned about Inline::Module, <br/>and then later decided to fully upgrade to a standard XS dist to get the <br/>last little bits of integration I wanted.&nbsp; With that direction, I <br/>already had most of a distribution assembled before I needed XS <br/>tooling.&nbsp; I think I looked into h2xs for the *next* module I wrote, but <br/>I was interested in a Dist::Zilla pattern and the output didn&#39;t seem <br/>useful, so I disregarded that and just copy/pasted a skeleton from my <br/>previous project.&nbsp; Ever since then I&#39;ve copy/pasted from whichever of my <br/>previous XS modules is closest in structure to the new one I want to <br/>write.&nbsp; I prefer high-integration with the library I&#39;m wrapping, so <br/>boilerplate calls to the C API doesn&#39;t usually provide any value to me.<br/><br/>While this doesn&#39;t say much about whether h2xs *can* be useful (my goal <br/>was to write new C code, not just wrap a pre-existing C library) I think <br/>my opinion on the topic is that the best recommendation to new XS users <br/>is to start with Inline::C, and then if they wish to release it on cpan, <br/>package it with Inline::Module.&nbsp; This has significantly less learning <br/>curve than immediately jumping into XS module tooling.<br/><br/>While XS tooling isn&#39;t as bad as Autoconf, it has the same <br/>barrier-to-entry effect of &quot;ok so here&#39;s 2 weeks of boring complicated <br/>arcane learning curve you need to wrestle with before you can get to the <br/>fun stuff, and BTW none of the cool kids are doing it this way anymore&quot;.<br/><br/>-Mike C<br/> https://www.nntp.perl.org/group/perl.perl5.porters/2025/07/msg270127.html Tue, 22 Jul 2025 13:19:01 +0000 Re: How do I configure so as to exclude '-lpthread' from 'libs' and'perllibs' in 'perl -V'? by Craig A. Berry On Sat, Jul 19, 2025 at 6:00&acirc;&#128;&macr;PM James E Keenan &lt;[email protected]&gt; wrote: <br/> <br/>&gt; To repeat, the focus of this message is to learn what switches I would <br/>&gt; supply to |./Configure| so as to *not* have |-lpthread| appear in |libs| <br/>&gt; or |perllibs|. <br/> <br/>Have you tried clobbering libswanted with only the values you want to <br/>have end up in libs? E.g., <br/> <br/>-A define:libswanted=&#39;dl m crypt util&#39; <br/> <br/>Not sure it will give you what you want, and it doesn&#39;t make sense to <br/>me to tell the linker to use a library (via ldflags) that you have <br/>otherwise asserted you don&#39;t have, but that does seem to be what you <br/>are asking for. <br/> https://www.nntp.perl.org/group/perl.perl5.porters/2025/07/msg270126.html Tue, 22 Jul 2025 12:45:36 +0000 Re: State of XSpp / C++ integration by James E Keenan On 7/22/25 07:27, Johan Vromans wrote:<br/>&gt; While trying to port wxPerl to a more recent version of wxWidgets I<br/>&gt; stumbled upon a number of XSpp issues that I find hard to solve.<br/>&gt; <br/>&gt; Before spending a lot of energy I would first like to ask if XSpp is still<br/>&gt; a viable toolchain for C++ embedding. It hasn&#39;t been updated for many years<br/>&gt; and has a load of old issues that have never looked at.<br/>&gt; <br/>&gt; If someone with practical XSpp experience would be able to provide some<br/>&gt; help I would welcome it.<br/>&gt; <br/>&gt; Thanks.<br/><br/>#####<br/>$ corelist ExtUtils::XSpp<br/><br/>Data for 2025-03-21<br/>ExtUtils::XSpp was not in CORE (or so I think)<br/>#####<br/><br/>So XSpp is not in the core distribution or maintained by Perl 5 Porters. <br/> I cannot recall hearing of it on this list before. So my hunch is <br/>that your impression of its viability is correct.<br/><br/>https://metacpan.org/dist/ExtUtils-XSpp<br/><br/> https://www.nntp.perl.org/group/perl.perl5.porters/2025/07/msg270125.html Tue, 22 Jul 2025 12:21:07 +0000 State of XSpp / C++ integration by Johan Vromans While trying to port wxPerl to a more recent version of wxWidgets I<br/>stumbled upon a number of XSpp issues that I find hard to solve. <br/><br/>Before spending a lot of energy I would first like to ask if XSpp is still<br/>a viable toolchain for C++ embedding. It hasn&#39;t been updated for many years<br/>and has a load of old issues that have never looked at.<br/><br/>If someone with practical XSpp experience would be able to provide some<br/>help I would welcome it.<br/><br/>Thanks.<br/> https://www.nntp.perl.org/group/perl.perl5.porters/2025/07/msg270124.html Tue, 22 Jul 2025 11:27:55 +0000 Re: New XS features? by Jon Gentle On Sun, Jul 20, 2025 at 5:36&acirc;&#128;&macr;AM Dave Mitchell &lt;[email protected]&gt; wrote: <br/>&gt; <br/>&gt; On Fri, Jul 18, 2025 at 02:45:01AM +0200, Leon Timmermans wrote: <br/>&gt; &gt; &gt; Secondly, as a way of quickly creating a wrapper for a C library by <br/>&gt; &gt; &gt; parsing its .h file: should we still be recommending this? <br/>&gt; &gt; <br/>&gt; &gt; I&#39;m not sure it&#39;s working well enough for that. Possibly we should try <br/>&gt; &gt; it on a bunch of them and see what it produces. <br/>&gt; <br/>&gt; For our readers: has anyone following this thread ever successfully used <br/>&gt; h2xs to generate a basic .xs file from a C header file for some library? <br/>&gt; <br/>&gt; If it turns out that h2xs is no longer up to the job, should be just <br/>&gt; drop all mention of it in the XS docs apart from creating an empty <br/>&gt; skeleton distro? <br/> <br/>I attempted to use h2xs a little over 2 years ago to create a module <br/>around a C header; specifically I attempted to use it for WebGPU <br/>native, a single .h file that allows languages to interface with <br/>WebGPU through a C API. This was my third XS module, and in each case <br/>I did not feel that h2xs lived up to my expectations. At best it <br/>helped me to know how to structure an XS file. For WebGPU, I pretty <br/>quickly ended up abandoning h2xs in favor of a perl script that would <br/>parse webgpu.h and generate the required files for a couple of <br/>reasons: <br/> <br/>* All of the functions and constants are dumped into a single package, <br/>no options to separate them somehow by prefix for instance. <br/>* It created all of the structs in unprefixed packages: i.e. <br/>WGPUBindGroupDescriptor instead of <br/>WebGPU::Direct::WGPUBindGroupDescriptor. <br/>* Structs ended up with 2 packages: WGPUBindGroupDescriptor and <br/>WGPUBindGroupDescriptorPtr, which map to the C types <br/>WGPUBindGroupDescriptor and WGPUBindGroupDescriptor*. <br/>* The package that ends with Ptr actually had the struct manipulation <br/>functions in it, so if I wanted to set or get `entryCount` on <br/>WGPUBindGroupDescriptor, I have to call new on WGPUBindGroupDescriptor <br/>first, then transform it into a WGPUBindGroupDescriptorPtr object by <br/>using the `_to_ptr` method. This conversion appears to be one-way, you <br/>cannot get the non-Ptr version from the Ptr version. <br/>* I could not find enums mapped to constants. Also it mapped the enum <br/>types to T_PTROBJ in the typemap <br/>* It mapped several common types to T_PTROBJ in the typemap, including <br/>char const *, double, int and size_t to name a few. <br/>* I saw no option for rerunning h2xs on an existing module that wasn&#39;t <br/>a complete overwrite. This is an issue since the webgpu API is still <br/>actively being developed, but even in general this would prohibit <br/>using h2xs again when an API adds a function. <br/>* Not that I expected it to, but h2xs had no option to organize groups <br/>of functions and types into seperate objects. This ultimately became <br/>the biggest pain point for WebGPU since all but one function operates <br/>off an opaque object type as its first parameter, and those types need <br/>to be separated into different packages in order for the API to make <br/>sense. <br/> <br/>I did attempt to rerun h2xs on webgpu.h to see if the file I was <br/>looking at was manipulated before being committed, but I could not get <br/>h2xs to run correctly on webgpu.h. I&#39;m not sure how I originally <br/>coaxed h2xs to produce the file that got committed. The simple fact <br/>that it takes quite a bit of effort to get h2xs to run correctly on <br/>what is, in my opinion, a straightforward C header is concerning. <br/> <br/>Overall it feels like h2xs was created for a different era, that its <br/>purpose is to allow access to C libraries directly from perl. I would <br/>think the use case is more like if there was some interesting vendor <br/>library that you wanted to prototype quickly with, this would get you <br/>access to it from perl instead of having to write a C project. The <br/>fact that you can start a module always seemed like an unrelated <br/>feature that was bolted on and ultimately became the defining feature. <br/>It has always been strange to me that the suggestion in perlmodlib is <br/>to use h2xs to start a project when I have no C header nor xs in a <br/>project. But by all accounts h2xs does generate a usable module <br/>skeleton. I personally would prefer that the tool that perl core ships <br/>for generating a simple, modern module skeleton have a name that <br/>reflects its purpose and was well documented about the upgrade path to <br/>more advanced tools. <br/> <br/>-Jon <br/> https://www.nntp.perl.org/group/perl.perl5.porters/2025/07/msg270123.html Tue, 22 Jul 2025 03:46:32 +0000 Perl 5.40.3-RC1 is now available! by Steve Hay via perl5-porters In 1522, thirty years after Columbus&#39; landfall in the Bahamas, another<br/>ship sailing west in the service of Spain completed the first voyage<br/>round the world. It had set out under the command of a Portuguese,<br/>Magellan, who had got as far as the Philippines, where he was killed.<br/>By then he had discovered and sailed through the straits named after him<br/>and with this voyage and its demonstration that the great oceans were<br/>all interconnected, the prologue to the European age can be considered<br/>over.<br/><br/> -- J. M. Roberts, &quot;The Penguin History of Europe&quot;<br/><br/>We are pleased to announce the first release candidate of version 40.3,<br/>the third maintenance release of version 40 of Perl 5.<br/><br/>You will soon be able to download Perl 5.40.3-RC1 from your favourite<br/>CPAN mirror or find it at:<br/><br/> https://metacpan.org/release/SHAY/perl-5.40.3-RC1/<br/><br/>SHA256 digests for this release are:<br/><br/> *perl-5.40.3-RC1.tar.gz:<br/> f0771e49db212191347589da4315ca5e002105493e08372b525201f015d15ec1<br/><br/> *perl-5.40.3-RC1.tar.xz:<br/> e0d3e4555458cbfbbd994d024d676150286d8f8dcd48a1deeafcab21a64783d6<br/><br/>You can find a full list of changes in the file &quot;perldelta.pod&quot; located<br/>in the &quot;pod&quot; directory inside the release and on the web.<br/><br/>***Please, please, please*** test your code against perl-5.40.3-RC1.<br/>This is your last chance to point out any critical regressions before<br/>v5.40.3 ships &quot;for real,&quot; and we&#39;d rather fix things for v5.40.3 than<br/>for v5.40.4!<br/><br/>The final v5.40.3 is expected to ship on 3 August.<br/><br/>Steve Hay<br/> https://www.nntp.perl.org/group/perl.perl5.porters/2025/07/msg270122.html Mon, 21 Jul 2025 20:25:24 +0000 Perl 5.38.5-RC1 is now available! by Steve Hay via perl5-porters Columbus set sail in 1492 and after 69 days his three little ships made<br/>a landfall in the Bahamas. A fortnight later he came to Cuba, which he<br/>named Hispaniola, before returning to Spain. The following year he came<br/>back to explore the islands known ever since as the West Indies (whose<br/>name commemorates Columbus&#39; tenacious belief that he had reached Asia).<br/>His confident leap in the dark had changed world history. Without<br/>knowing it he had discovered a new world.<br/><br/> -- J. M. Roberts, &quot;The Penguin History of Europe&quot;<br/><br/>We are pleased to announce the first release candidate of version 38.5,<br/>the fifth maintenance release of version 38 of Perl 5.<br/><br/>You will soon be able to download Perl 5.38.5-RC1 from your favourite<br/>CPAN mirror or find it at:<br/><br/> https://metacpan.org/release/SHAY/perl-5.38.5-RC1/<br/><br/>SHA256 digests for this release are:<br/><br/> *perl-5.38.5-RC1.tar.gz:<br/> a7cd66e3b82a1740bdfb39097d143da1effa4c772ae5686185373a8f94ecbe72<br/><br/> *perl-5.38.5-RC1.tar.xz:<br/> ef59ce5ca010beac656709c3b73ffc8d43ca7819b3c119e8bd5ddf0d983c33db<br/><br/>You can find a full list of changes in the file &quot;perldelta.pod&quot; located<br/>in the &quot;pod&quot; directory inside the release and on the web.<br/><br/>***Please, please, please*** test your code against perl-5.38.5-RC1.<br/>This is your last chance to point out any critical regressions before<br/>v5.38.5 ships &quot;for real,&quot; and we&#39;d rather fix things for v5.38.5 than<br/>for v5.38.6!<br/><br/>The final v5.38.5 is expected to ship on 3 August.<br/><br/>Steve Hay<br/> https://www.nntp.perl.org/group/perl.perl5.porters/2025/07/msg270121.html Mon, 21 Jul 2025 20:25:22 +0000 Re: New XS features? by "George S. Baugh" via perl5-porters Tried h2xs out the other day to see if I could wrap libpg_query<br/><br/>The primary problem I saw was that it generated totally useless<br/>typemaps (e.g. everything is OPAQUE_STRUCT, couldn&#39;t even figure out<br/>basic char* -&gt; SV either)<br/><br/>All the XS examples in perlxstut basically showed writing raw XS and<br/>ignoring typemaps for everything but the most trivial types<br/><br/>So I tried protobuf-perlxs, which also does not work (looks like it<br/>needs another layer of code generator atop it to read the protobuf and<br/>build the xs/pm files).<br/><br/>Current strategy for &quot;struct -&gt; hash&quot; is &quot;crib from one of the<br/>libraries deserializing arbitrary data into hashes, e.g. JSON::XS&quot;, but<br/>that will take a good deal longer, which I don&#39;t have time for right<br/>now.<br/><br/>Maybe there&#39;s some good off-the-shelf typemaps somewhere but I haven&#39;t<br/>found them.<br/><br/>On Sun, 2025-07-20 at 13:01 +0100, Dave Mitchell wrote:<br/>&gt; On Fri, Jul 18, 2025 at 02:45:01AM +0200, Leon Timmermans wrote:<br/>&gt; &gt; &gt; Secondly, as a way of quickly creating a wrapper for a C library<br/>&gt; &gt; &gt; by<br/>&gt; &gt; &gt; parsing its .h file: should we still be recommending this?<br/>&gt; &gt; <br/>&gt; &gt; I&#39;m not sure it&#39;s working well enough for that. Possibly we should<br/>&gt; &gt; try<br/>&gt; &gt; it on a bunch of them and see what it produces.<br/>&gt; <br/>&gt; I had a quick play with h2xs -x (x = extract info from header file<br/>&gt; and<br/>&gt; generate XSUBs) and didn&#39;t get far. Not encouraging. This is after<br/>&gt; installing&Acirc;&nbsp; C::Scan.<br/>&gt; <br/>&gt; $ h2xs5.43.1 -n MySSH2 -x /usr/include/libssh2.h<br/>&gt; Defaulting to backwards compatibility with perl 5.43.1<br/>&gt; If you intend this module to be compatible with earlier perl<br/>&gt; versions, please<br/>&gt; specify a minimum perl version with the -b option.<br/>&gt; <br/>&gt; Writing MySSH2/ppport.h<br/>&gt; Scanning typemaps...<br/>&gt; &Acirc;&nbsp;Scanning /home/davem/perl5/git/bleed.out/lib/5.43.1/ExtUtils/typemap<br/>&gt; Scanning /usr/include/libssh2.h for functions...<br/>&gt; panic: multiple types without intervening comma in<br/>&gt; void (*libssh2_trace_handler_func)(LIBSSH2_SESSION*,<br/>&gt; &Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp; void *,<br/>&gt; &Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp; const char *,<br/>&gt; &Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp; size_t)<br/>&gt; whited-out as<br/>&gt; &Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp; (*libssh2_trace_handler_func)(LIBSSH2_SESSION*,<br/>&gt; &Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp; *,<br/>&gt; &Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp; *,<br/>&gt; &Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp; size_t)<br/>&gt; Cannot process declaration `__attribute__((deprecated(&quot;since libssh2<br/>&gt; &quot; &quot;1.11.1&quot; &quot;. &quot; &quot;Use libssh2_session_callback_set2()&quot;)))<br/>&gt; &Acirc;&nbsp;void *libssh2_session_callback_set(LIBSSH2_SESSION *session,<br/>&gt; &Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp;&Acirc;&nbsp; int cbtype, void<br/>&gt; *callback)&#39; without an identifier at<br/>&gt; /home/davem/perl5/git/bleed.out/lib/site_perl/5.43.1/C/Scan.pm line<br/>&gt; 720.<br/>&gt; <br/>&gt; <br/>&gt; I&#39;ve also now noticed that perlxstut.pod doesn&#39;t actually include an<br/>&gt; example of using &#39;h2xs -x&#39; <br/>&gt; <br/><br/> https://www.nntp.perl.org/group/perl.perl5.porters/2025/07/msg270120.html Mon, 21 Jul 2025 16:00:57 +0000 Re: New XS features? by Maxim Dave Mitchell, 2025-07-20 10:36 +0100:<br/>&gt; For our readers: has anyone following this thread ever successfully used<br/>&gt; h2xs to generate a basic .xs file from a C header file for some library?<br/><br/>My experience is a drop in the ocean, but just in case...<br/><br/>I have seriously tried XS only once when I was wrapping a C library in<br/>Perl a long time ago. I don&#39;t remember using h2xs, but looking at its<br/>output now, I suspect I might have gotten too intimidated back then.<br/><br/>- It doesn&#39;t just &quot;convert .h C header files to Perl extensions&quot;,<br/> but creates an entire distribution.<br/>- To generate XSUBs (flag -x) a non-core module C::Scan is required.<br/>- The generated code doesn&#39;t compile.<br/>- The generated code is also a lot to understand and handle on top<br/> of already non-trivial subject of XS.<br/><br/>I did use ExtUtils::Constant back then, which is documented to be based<br/>on the code of h2xs, whatever that means.<br/> https://www.nntp.perl.org/group/perl.perl5.porters/2025/07/msg270119.html Mon, 21 Jul 2025 07:49:13 +0000 Re: Magic v2 - Review for Merge and next steps by Ovid On Sun, Jul 20, 2025 at 3:11&acirc;&#128;&macr;PM Leon Timmermans &lt;[email protected]&gt; wrote: <br/> <br/>&gt; &gt;&gt; I don&#39;t think it&#39;s quite clear why we would want value hooks. <br/>&gt; <br/>&lt;snip&gt; <br/> <br/>&gt; Value magic as an annotation sounds useful and has precedent (e.g. <br/>&gt; vstrings). <br/> <br/>&lt;snip&gt; <br/> <br/>&gt; I think that [COW would] require an unholy amount of backreferences to <br/>&gt;&gt; everything that owns a reference to the current value. <br/>&gt;&gt; <br/>&gt; &lt;snip&gt; <br/> <br/>&gt; How would [not printing sensivive information] work? ... <br/>&gt;&gt; <br/>&gt; &lt;snip&gt; <br/> <br/>I think this is getting into implementation details, which is great, but <br/>your original concern was &quot;I don&#39;t think it&#39;s quite clear why we would want <br/>value hooks.&quot; That&#39;s the question I was trying to answer. <br/> <br/>The beauty of this idea is, as Paul pointed out, is that instead of ten <br/>different cool features having ten different implementations, we have one <br/>underlying idea that all makes all of those features possible, plus many <br/>more that we&#39;ve never thought of. To me, instead of a red flag, it&#39;s a <br/>green flag. It doesn&#39;t *prove* the idea is good, but it&#39;s a great indicator. <br/> <br/>Best, <br/>Ovid <br/>-- <br/>https://curtispoe.org/ <br/> https://www.nntp.perl.org/group/perl.perl5.porters/2025/07/msg270118.html Mon, 21 Jul 2025 05:51:14 +0000 Release announcement for perl v5.43.1 by Richard Leach The water from the brine is evaporated in enormous hot vessels, <br/> which leave the salt about the same consistency as wet sand. <br/> After a run through another oven, what emerges are glistening <br/> pure crystals of salt. I run my hands through the grains as <br/> they emerge, surprised for a moment by how hot they are to touch. <br/> &#39;This is ultra fine,&#39; says Joe. &#39;It goes into Wotsits.&#39; <br/> <br/> -- Ed Conway, &quot;Material World&quot; <br/> <br/>We are as keen as mustard to announce version 5.43.1, <br/>the first development release of version 5.43 of Perl. <br/> <br/>You will soon be able to download Perl 5.43.1 from your <br/>favorite CPAN mirror or find it at: <br/> <br/>https://metacpan.org/release/HYDAHY/perl-5.43.1/ <br/> <br/>SHA256 digests for this release are: <br/> <br/> 5221ebf5badfbb943d168ff589ce93456a11f219105c930cc01e8a82a62adb65 <br/>perl-5.43.1.tar.gz <br/> 260fa2f8cae4a700083f48db70c2eb56abc3e45a166a6eb22df3319aef7eb141 <br/>perl-5.43.1.tar.xz <br/> <br/>You can find a full list of changes in the file &quot;perldelta.pod&quot; located in <br/>the &quot;pod&quot; directory inside the release and on the web at <br/> <br/>https://metacpan.org/release/HYDAHY/perl-5.43.1/view/pod/perldelta.pod <br/> <br/>Perl 5.43.1 represents approximately 2 weeks of development since Perl <br/>5.43.0 and contains approximately 15,000 lines of changes across 410 files <br/>from 21 authors. <br/> <br/>Excluding auto-generated files, documentation and release tools, there were <br/>approximately 12,000 lines of changes to 360 .pm, .t, .c and .h files. <br/> <br/>Perl continues to flourish into its fourth decade thanks to a vibrant <br/>community of users and developers. The following people are known to have <br/>contributed the improvements that became Perl 5.43.1: <br/> <br/>Alexander Karelas, Chad Granum, Chris &#39;BinGOs&#39; Williams, Chris Prather, <br/>Dagfinn Ilmari Manns&Atilde;&yen;ker, Dan Book, Daniel Dragan, Daniel La&Atilde;&frac14;gt, Dave Cross, <br/>David Mitchell, James E Keenan, Karen Etheridge, Karl Williamson, Leon <br/>Timmermans, Paul Evans, Philippe Bruhat (BooK), Richard Leach, &Aring;&nbsp;t&Auml;&#155;p&Atilde;&iexcl;n N&Auml;&#155;mec, <br/>TAKAI Kousuke, Thibault Duponchelle, Tony Cook. <br/> <br/>The list above is almost certainly incomplete as it is automatically <br/>generated from version control history. In particular, it does not include <br/>the names of the (very much appreciated) contributors who reported issues to <br/>the Perl bug tracker. <br/> <br/>Many of the changes included in this version originated in the CPAN modules <br/>included in Perl&#39;s core. We&#39;re grateful to the entire CPAN community for <br/>helping Perl to flourish. <br/> <br/>For a more complete list of all of Perl&#39;s historical contributors, please <br/>see the F&lt;AUTHORS&gt; file in the Perl source distribution. <br/> <br/>We expect to release version 5.43.2 on 2025-08-20. <br/>The next major stable release of Perl should appear in the first half of 2026. <br/> <br/>Om nom nom nom <br/> https://www.nntp.perl.org/group/perl.perl5.porters/2025/07/msg270117.html Sun, 20 Jul 2025 21:56:56 +0000 Re: New XS features? by Leon Timmermans On Sun, Jul 20, 2025 at 11:36&acirc;&#128;&macr;AM Dave Mitchell &lt;[email protected]&gt; wrote: <br/>&gt; <br/>&gt; On Fri, Jul 18, 2025 at 02:45:01AM +0200, Leon Timmermans wrote: <br/>&gt; &gt; &gt; First, for creating a skeleton disto when starting a new project (or when <br/>&gt; &gt; &gt; following tutorial examples): what should be be recommended instead. <br/>&gt; &gt; <br/>&gt; &gt; Modern authoring tools have built-in support for creating a new <br/>&gt; &gt; distribution. Personally I usually use Dist::Zilla with my TemplateXS <br/>&gt; &gt; plugin, it has a minimal but useful XS template. There&#39;s more than one <br/>&gt; &gt; way to do it though; that makes this rather tricky. <br/>&gt; <br/>&gt; Well, for the specific case of creating a skeleton distro for playing with <br/>&gt; when following along in perlxstut.pod, do you think its still ok to to <br/>&gt; tell the reader to use &quot;h2xs -A -n Foo::Bar&quot;? <br/> <br/>It&#39;s a valid option, but I&#39;m not sure it&#39;s a good option (e.g. <br/>defaulting to requiring the current perl version at the minimum is <br/>extremely unhelpful). <br/> <br/>Honestly I think any of us could write a more helpful tool in an <br/>afternoon, because there&#39;s a general pattern of h2xs trying to do way <br/>too much. Even a tool doing the absolute minimum would be more usable. <br/> <br/>&gt; For the more general case case of creating a skeleton distro when <br/>&gt; starting a new project, perhaps we could say that &#39;h2xs -n&#39; is bundled and <br/>&gt; will produce a basic skeleton, but see Dist::Zilla (and other examples??) <br/>&gt; for more modern ways of doing it? <br/> <br/>Maybe. I think Module::Starter can also be configured to do something <br/>like this, I just have never done so. I&#39;m sure there are more <br/>possibilities that aren&#39;t even on my radar (Minilla?). And to be <br/>honest, I&#39;m not sure we even need a tool. <br/> <br/>&gt; PS - are you happy in principle with my &quot;&#39;REQUIRE 4.0&#39; implies strict&quot; <br/>&gt; proposal? I don&#39;t think anyone&#39;s commented on it yet. <br/> <br/>I&#39;m good with &quot;&#39;REQUIRE 4.0&#39; implies strict&quot;, I&#39;m just still not sure <br/>if &quot;REQUIRE&quot; is the best approach here (as opposed to having only <br/>&quot;STRICT: ENABLED&quot; or some such). I&#39;m worried we&#39;re over-engineering it <br/>now to compensate for the historic under-engineering. <br/> <br/>Explicit versioning does have a certain mental cost, and I suspect we <br/>actively want to keep that cost low here. That means that if we do <br/>this, we should pack a bunch of features so that we don&#39;t have to <br/>release a 5.0 any time soon. <br/> <br/>Leon <br/> https://www.nntp.perl.org/group/perl.perl5.porters/2025/07/msg270116.html Sun, 20 Jul 2025 14:45:16 +0000 Re: Magic v2 - Review for Merge and next steps by Leon Timmermans On Sun, Jul 20, 2025 at 8:59&acirc;&#128;&macr;AM Ovid &lt;[email protected]&gt; wrote: <br/>&gt; <br/>&gt; On Sun, Jul 20, 2025 at 2:32&acirc;&#128;&macr;AM Leon Timmermans &lt;[email protected]&gt; wrote: <br/>&gt;&gt; <br/>&gt;&gt; On Sat, Jul 12, 2025 at 4:06&acirc;&#128;&macr;PM Paul &quot;LeoNerd&quot; Evans <br/>&gt;&gt; &lt;[email protected]&gt; wrote: <br/>&gt;&gt; &gt; TL;DR: Please help review my &quot;magic v2&quot; so far so I can add more useful <br/>&gt;&gt; &gt; abilities that will provide a good foundation for implementing a <br/>&gt;&gt; &gt; whole bunch of features on top of. <br/>&gt;&gt; &lt;snip&gt; <br/>&gt;&gt; I don&#39;t think it&#39;s quite clear why we would want value hooks. I don&#39;t <br/>&gt;&gt; think there is a good description of what problems we have that this <br/>&gt;&gt; would solve. I don&#39;t think it&#39;s obvious upfront what kind of changes <br/>&gt;&gt; are required in the codebase. <br/>&gt; <br/>&gt; <br/>&gt; This is one of those areas where I think we open up a whole host of capabilities and if people start playing with the idea, we&#39;ll find use cases we never dreamed of. <br/>&gt; <br/>&gt; I&#39;ve said in the past that I&#39;d like value hooks to validate if a variable is undefined or uninitialized. Having &quot;infectious&quot; values (like taint) would also help here. <br/> <br/>Value magic as an annotation sounds useful and has precedent (e.g. vstrings). <br/> <br/>&gt; COW magic might be possible? my $foo :Cow = $bar; could assign a reference to a huge data structure, but if anyone tried to change $foo, it would try to clone it first (not always possible, I know). <br/> <br/>I think that would require an unholy amount of backreferences to <br/>everything that owns a reference to the current value. COW works for <br/>strings because they don&#39;t nest. <br/> <br/>It does point out an important challenge with the idea of value magic: <br/>our current set magic is *after* the assignment (which makes sense for <br/>variable magic), but value magic generally wants it to happen *before* <br/>the assignment. This alone would mean a vast amount of change in the <br/>codebase (various places that set SVs). <br/> <br/>&gt; Or maybe we could declare some values as immutable, without having to use constants? Here are a couple of examples that are annoying: <br/>&gt; <br/>&gt; use Readonly; <br/>&gt; use Hash::Util qw(lock_hash); <br/>&gt; <br/>&gt; Readonly my $x =&gt; &quot;hello&quot;; <br/>&gt; my $y = $x; # $y is NOT read-only, infection doesn&#39;t happen <br/>&gt; <br/>&gt; my %h = (a =&gt; 1, b =&gt; 2); <br/>&gt; lock_hash(%h); <br/>&gt; my %copy = %h; # %copy is a regular hash, not locked <br/> <br/>I suspect that would fundamentally break the language. What should this do? <br/> <br/>my %a <br/>my %b : Readonly = (a =&gt; 1, b =&gt; 2); <br/>%a = %b; <br/>%a = (); <br/> <br/>&gt; Or someone tries to print a password or PII and it&#39;s printed as [Redacted]? Also, lots of debugging opportunities here. <br/> <br/>How would that work? As an annotation that print specifically looks <br/>for? How would it work if someone appends that password to another <br/>string first? <br/> <br/>Leon <br/> https://www.nntp.perl.org/group/perl.perl5.porters/2025/07/msg270115.html Sun, 20 Jul 2025 13:11:16 +0000 Re: New XS features? by Dave Mitchell On Fri, Jul 18, 2025 at 02:45:01AM +0200, Leon Timmermans wrote:<br/>&gt; &gt; Secondly, as a way of quickly creating a wrapper for a C library by<br/>&gt; &gt; parsing its .h file: should we still be recommending this?<br/>&gt; <br/>&gt; I&#39;m not sure it&#39;s working well enough for that. Possibly we should try<br/>&gt; it on a bunch of them and see what it produces.<br/><br/>I had a quick play with h2xs -x (x = extract info from header file and<br/>generate XSUBs) and didn&#39;t get far. Not encouraging. This is after<br/>installing C::Scan.<br/><br/>$ h2xs5.43.1 -n MySSH2 -x /usr/include/libssh2.h<br/>Defaulting to backwards compatibility with perl 5.43.1<br/>If you intend this module to be compatible with earlier perl versions, please<br/>specify a minimum perl version with the -b option.<br/><br/>Writing MySSH2/ppport.h<br/>Scanning typemaps...<br/> Scanning /home/davem/perl5/git/bleed.out/lib/5.43.1/ExtUtils/typemap<br/>Scanning /usr/include/libssh2.h for functions...<br/>panic: multiple types without intervening comma in<br/> void (*libssh2_trace_handler_func)(LIBSSH2_SESSION*,<br/> void *,<br/> const char *,<br/> size_t)<br/>whited-out as<br/> (*libssh2_trace_handler_func)(LIBSSH2_SESSION*,<br/> *,<br/> *,<br/> size_t)<br/>Cannot process declaration `__attribute__((deprecated(&quot;since libssh2 &quot; &quot;1.11.1&quot; &quot;. &quot; &quot;Use libssh2_session_callback_set2()&quot;)))<br/> void *libssh2_session_callback_set(LIBSSH2_SESSION *session,<br/> int cbtype, void *callback)&#39; without an identifier at /home/davem/perl5/git/bleed.out/lib/site_perl/5.43.1/C/Scan.pm line 720.<br/><br/><br/>I&#39;ve also now noticed that perlxstut.pod doesn&#39;t actually include an<br/>example of using &#39;h2xs -x&#39; <br/><br/>-- <br/>Diplomacy is telling someone to go to hell in such a way that they&#39;ll<br/>look forward to the trip<br/> https://www.nntp.perl.org/group/perl.perl5.porters/2025/07/msg270114.html Sun, 20 Jul 2025 12:01:36 +0000 Re: New XS features? by Dan On Thu, Jul 17, 2025 at 8:46&acirc;&#128;&macr;PM Leon Timmermans &lt;[email protected]&gt; wrote: <br/> <br/>&gt; Modern authoring tools have built-in support for creating a new <br/>&gt; distribution. Personally I usually use Dist::Zilla with my TemplateXS <br/>&gt; plugin, it has a minimal but useful XS template. There&#39;s more than one <br/>&gt; way to do it though; that makes this rather tricky. <br/>&gt; <br/> <br/>I have no experience in creating XS dists, but <br/>https://metacpan.org/pod/Dist::Zilla::MintingProfile::Starter describes how <br/>to easily customize it and I would love to be able to include an <br/>XS-specific minting profile as an example if you have any suggestions. <br/> <br/>-Dan <br/> https://www.nntp.perl.org/group/perl.perl5.porters/2025/07/msg270113.html Sun, 20 Jul 2025 10:35:26 +0000 Re: New XS features? by Dave Mitchell On Fri, Jul 18, 2025 at 02:45:01AM +0200, Leon Timmermans wrote:<br/>&gt; &gt; First, for creating a skeleton disto when starting a new project (or when<br/>&gt; &gt; following tutorial examples): what should be be recommended instead.<br/>&gt; <br/>&gt; Modern authoring tools have built-in support for creating a new<br/>&gt; distribution. Personally I usually use Dist::Zilla with my TemplateXS<br/>&gt; plugin, it has a minimal but useful XS template. There&#39;s more than one<br/>&gt; way to do it though; that makes this rather tricky.<br/><br/>Well, for the specific case of creating a skeleton distro for playing with<br/>when following along in perlxstut.pod, do you think its still ok to to<br/>tell the reader to use &quot;h2xs -A -n Foo::Bar&quot;?<br/><br/>For the more general case case of creating a skeleton distro when<br/>starting a new project, perhaps we could say that &#39;h2xs -n&#39; is bundled and<br/>will produce a basic skeleton, but see Dist::Zilla (and other examples??)<br/>for more modern ways of doing it?<br/><br/>&gt; &gt; Secondly, as a way of quickly creating a wrapper for a C library by<br/>&gt; &gt; parsing its .h file: should we still be recommending this?<br/>&gt; <br/>&gt; I&#39;m not sure it&#39;s working well enough for that. Possibly we should try<br/>&gt; it on a bunch of them and see what it produces.<br/><br/>For our readers: has anyone following this thread ever successfully used<br/>h2xs to generate a basic .xs file from a C header file for some library?<br/><br/>If it turns out that h2xs is no longer up to the job, should be just<br/>drop all mention of it in the XS docs apart from creating an empty<br/>skeleton distro?<br/><br/>&gt; &gt; &gt; We could just disallow all-caps labels in strict mode?<br/>&gt; &gt;<br/>&gt; &gt; Not sure. Seems a bit too extreme?<br/>&gt; <br/>&gt; &gt; Not sure. Seems a bit too extreme?<br/>&gt; Maybe. I never write all-caps labels so to me it feels like a<br/>&gt; reasonable constraint. We have worse constraints to be honest<br/>&gt; (especially around #ifdefs).<br/><br/>Fair enough.<br/><br/>PS - are you happy in principle with my &quot;&#39;REQUIRE 4.0&#39; implies strict&quot;<br/>proposal? I don&#39;t think anyone&#39;s commented on it yet.<br/><br/>-- <br/>Diplomacy is telling someone to go to hell in such a way that they&#39;ll<br/>look forward to the trip<br/> https://www.nntp.perl.org/group/perl.perl5.porters/2025/07/msg270112.html Sun, 20 Jul 2025 09:36:25 +0000 Re: Magic v2 - Review for Merge and next steps by Ovid On Sun, Jul 20, 2025 at 2:32&acirc;&#128;&macr;AM Leon Timmermans &lt;[email protected]&gt; wrote: <br/> <br/>&gt; On Sat, Jul 12, 2025 at 4:06&acirc;&#128;&macr;PM Paul &quot;LeoNerd&quot; Evans <br/>&gt; &lt;[email protected]&gt; wrote: <br/>&gt; &gt; TL;DR: Please help review my &quot;magic v2&quot; so far so I can add more useful <br/>&gt; &gt; abilities that will provide a good foundation for implementing a <br/>&gt; &gt; whole bunch of features on top of. <br/>&gt; &lt;snip&gt; <br/>&gt; I don&#39;t think it&#39;s quite clear why we would want value hooks. I don&#39;t <br/>&gt; think there is a good description of what problems we have that this <br/>&gt; would solve. I don&#39;t think it&#39;s obvious upfront what kind of changes <br/>&gt; are required in the codebase. <br/>&gt; <br/> <br/>This is one of those areas where I think we open up a whole host of <br/>capabilities and if people start playing with the idea, we&#39;ll find use <br/>cases we never dreamed of. <br/> <br/>I&#39;ve said in the past that I&#39;d like value hooks to validate if a variable <br/>is undefined or uninitialized. Having &quot;infectious&quot; values (like taint) <br/>would also help here. <br/> <br/>COW magic might be possible? my $foo :Cow = $bar; could assign a reference <br/>to a huge data structure, but if anyone tried to change $foo, it would try <br/>to clone it first (not always possible, I know). Or maybe we could declare <br/>some values as immutable, without having to use constants? Here are a <br/>couple of examples that are annoying: <br/> <br/> use Readonly; <br/> use Hash::Util qw(lock_hash); <br/> <br/> Readonly my $x =&gt; &quot;hello&quot;; <br/> my $y = $x; # $y is NOT read-only, infection doesn&#39;t happen <br/> <br/> my %h = (a =&gt; 1, b =&gt; 2); <br/> lock_hash(%h); <br/> my %copy = %h; # %copy is a regular hash, not locked <br/> <br/>Or someone tries to print a password or PII and it&#39;s printed as [Redacted]? <br/>Also, lots of debugging opportunities here. <br/> <br/>So, tons of use cases I could think of. Some of this we can do with overload, <br/>but it&#39;s painful, limited, and not really transparent. <br/> <br/>Best, <br/>Ovid <br/> <br/> <br/>-- <br/>https://curtispoe.org/ <br/> https://www.nntp.perl.org/group/perl.perl5.porters/2025/07/msg270111.html Sun, 20 Jul 2025 06:59:58 +0000 Re: Magic v2 - Review for Merge and next steps by Leon Timmermans On Sat, Jul 12, 2025 at 4:06&acirc;&#128;&macr;PM Paul &quot;LeoNerd&quot; Evans <br/>&lt;[email protected]&gt; wrote: <br/>&gt; TL;DR: Please help review my &quot;magic v2&quot; so far so I can add more useful <br/>&gt; abilities that will provide a good foundation for implementing a <br/>&gt; whole bunch of features on top of. <br/>&gt; <br/>&gt; I have a slowly-growing collection of ideas and partial experiments, <br/>&gt; some of which are written up in PPC documents, that all involve adding <br/>&gt; extra features, extra abilities, that would be useful in various <br/>&gt; situations. A lot of these are partly stalled for want of a decent way <br/>&gt; to encapsulate &quot;extension behaviour&quot;. For example, a module or core <br/>&gt; feature that wanted to provide an attribute for subroutine signature <br/>&gt; parameters will need some way to provide extra code that may be <br/>&gt; required at various points during compilation or runtime. <br/>&gt; <br/>&gt; I have a bunch of existing modules that try to do variations on this <br/>&gt; kind of idea, by providing some sort of C-level data structure <br/>&gt; definition that extension modules can provide into the base system, to <br/>&gt; contain those extensions. There&#39;s a converging design among many of <br/>&gt; these, that it&#39;d be most handy to have a data structure that contains <br/>&gt; function pointers, each of which is run at a particular phase of <br/>&gt; operation. These structures then define a kind of behaviour, provided <br/>&gt; by a module, that can be attached to various target instances. <br/>&gt; <br/>&gt; In many ways this sounds exactly like Perl&#39;s &quot;MAGIC&quot;. MAGIC is useful <br/>&gt; for adding trigger options to scalar variables, but has some <br/>&gt; shortcomings when trying to apply it to other situations. Perl core <br/>&gt; does attempt with some limited success to reuse the same magic virtual <br/>&gt; table definition on non-scalars (i.e. arrays, hashes and subroutines), <br/>&gt; but this is of limited utility. Furthermore, there&#39;s no ability to <br/>&gt; create kinds of magic that attach to the semantic idea of a &quot;value&quot;, <br/>&gt; and follow it around as it gets copied and assigned to various other <br/>&gt; scalars. <br/>&gt; <br/>&gt; The reason that existing magic is rather limited in ability is because <br/>&gt; the entire set of behaviours provided by a kind of magic are <br/>&gt; encapsulated in a bunch of functions whose addresses are given in <br/>&gt; pointers in the &quot;Magic virtual table&quot; structure (MGVTBL), but that <br/>&gt; virtual table doesn&#39;t have any other fields to store metadata of any <br/>&gt; kind. It defines a fixed set of 8 different functions for various <br/>&gt; scalar-variable related scenarios, and makes it difficult to extend to <br/>&gt; other situations, as would apply to arrays, hashes, or other things. <br/>&gt; <br/>&gt; The main idea of my &quot;Magic v2&quot; redesign therefore is to extend the <br/>&gt; definition of this vtable, with a whole new structure shape that has <br/>&gt; metadata fields for what &quot;shape&quot; it is, a version number, some flags, <br/>&gt; etc... Various different &quot;shapes&quot; are then defined for various <br/>&gt; situations. There&#39;s a &quot;scalar variable&quot; shape that mostly matches the <br/>&gt; uses of existing magic, with plenty of space for other shapes to be <br/>&gt; added with different sets of function pointers. <br/>&gt; <br/>&gt; Right now, I have this redesign in a branch that contains scalar, array <br/>&gt; and hash variable shapes, and a shape intended to apply to scalar <br/>&gt; *values*, with code around that tries to copy the magic attachment <br/>&gt; around when the value itself is copied. <br/>&gt; <br/>&gt; Of these, the very last one - creating the concept of scalar value <br/>&gt; magic - still has a number of performance-related questions that have a <br/>&gt; measurable impact on the operation of the interpreter even in programs <br/>&gt; that do not make use of it. So that part at least isn&#39;t ready for <br/>&gt; consideration of merge into blead at this time. <br/>&gt; <br/>&gt; However, now that we can start considering things to look into bringing <br/>&gt; into development for (5.)43.1, I would like to propose the basic part <br/>&gt; of Magic v2 (the base mechanism with the ability to have different <br/>&gt; shapes), as well as the stable parts of scalar/array/hash variable <br/>&gt; magic. All of these are just neatened-up rewrites of existing <br/>&gt; behaviours, but made in a way as to allow a lot of extension in future. <br/> <br/>I&#39;m very much in favor of us gaining better variable magic, but I have <br/>some serious reservations about value magic. <br/> <br/>For variable magic, I believe it&#39;s fairly clear what we would want to <br/>achieve. Essentially it&#39;s ties without some of the limitations of ties <br/>(performance and otherwise). The rough shapes of what that would look <br/>like are obvious (e.g. a vtable with a method for every array <br/>operation). Given ties are already there, I expect that the required <br/>changes in the rest of the code are also straightforward (refactor <br/>array/hash tie code to use the hooks as a layer of indirection <br/>instead). <br/> <br/>I don&#39;t think it&#39;s quite clear why we would want value hooks. I don&#39;t <br/>think there is a good description of what problems we have that this <br/>would solve. I don&#39;t think it&#39;s obvious upfront what kind of changes <br/>are required in the codebase. <br/> <br/>We can&#39;t meaningfully discuss a solution before we have agreed on the <br/>problem it&#39;s meant to solve. Even a basic question like &quot;what kind of <br/>hooks would we need&quot; and &quot;where would those hooks be called&quot; do not <br/>have an answer right now. <br/> <br/>Leon <br/> https://www.nntp.perl.org/group/perl.perl5.porters/2025/07/msg270110.html Sun, 20 Jul 2025 00:32:38 +0000