in reply to Readonly vs ReadonlyX

PBP is not a book to be followed without thinking. constant has its uses (the main feature is compile time evaluation and inlining), Readonly has other uses. See e.g. What is the difference between the constant construct in Perl and the Readonly construct in Perl? for an old discussion on the same topic.

map{substr$_->[0],$_->[1]||0,1}[\*||{},3],[[]],[ref qr-1,-,-1],[{}],[sub{}^*ARGV,3]

Replies are listed 'Best First'.
Re^2: Readonly vs ReadonlyX
by BillKSmith (Monsignor) on Mar 10, 2023 at 15:50 UTC
    The Preface of PBP is explicit about the thinking required before any of its suggestions are accepted. Unfortunately, it seems that software QA managers do not always read (or believe) the Preface.
    Bill
      As already elaborated, this has nothing to do with PBP.

      The OP just didn't do his homework and keeps blaming PBP and his company for their PC-policies.

      Cheers Rolf
      (addicted to the 𐍀𐌴𐍂𐌻 Programming Language :)
      Wikisyntax for the Monastery

Re^2: Readonly vs ReadonlyX
by rlauer (Novice) on Mar 10, 2023 at 14:24 UTC
    Thank you for the reference, I will read that for more insight. It's true I can mitigate issues of using ReadonlyX in my code by using constant when constant fits the use case, however it still leaves the conundrum of Readonly vs ReadonlyX clashing when two modules not under my control are involved...
      The author of ReadonlyX explains at length that he "improved" the API to be a "drop in replacement"

      (--> https://metacpan.org/pod/ReadonlyX#ReadonlyX-vs.-Readonly)

      And this aliasing of namespaces happens in his module

      BEGIN { *ReadonlyX:: = *Readonly:: } package # hide from PAUSE Readonly; # I wish...

      that's unfortunate to word it mildly.

      Especially since the author explicitly admits incompatibilities. (quote: "break 16 years of code out there in Darkpan.")

      When another module loads the original Readonly, different implementations and prototypes will collide.

      This "collides" with my understanding of a "drop-in-replacement".

      If you want to use ReadonlyX, force it to use it's own namespace.

      If there is no option for that, file a feature request.°

      Regarding the strong wording of the PC-Policy - which I also dislike for its style- I doubt it originates in PBP.

      And it seems to me this module is also far newer (2016) than Damian's book (2005), so please stop referencing it as justification.

      Cheers Rolf
      (addicted to the 𐍀𐌴𐍂𐌻 Programming Language :)
      Wikisyntax for the Monastery

      °) I could also come up with a wrapper module which is fixing that by unaliasing the namespaces, but let's wait what the author says.

        > that's unfortunate to word it mildly.

        In hindsight, this is because Readonly is recommending fully qualified subs,

        Readonly::Scalar $sca => $initial_value; Readonly::Array @arr => @values; Readonly::Hash %has => (key => value, key => value, ...);

        Any "drop-in replacement" supporting this must meddle with the namespace ... ugly!

        Cheers Rolf
        (addicted to the 𐍀𐌴𐍂𐌻 Programming Language :)
        Wikisyntax for the Monastery