Chapter 6 of 9

Common ancestors explain the deep overlaps, and several flowed into Perl 6

FeatureShared ancestorPerl 6 dateOther adopters (dates)Verdict
Roles / traitsSchärli, Ducasse, Nierstrasz, Black, ECOOP July 2003 (Squeak)A12 (16 Apr 2004); stateful roles argued Dec 2003Scala traits (JVM Jan 2004); PHP 5.4 (RFCs 2008); Java 8 default methods (strawman May 2010, shipped 2014); Groovy 2.3 (2014)Common ancestor; flowed into Perl 6 (A121; horizontalreuse2; FOOL 20113)
Multiple dispatchCLOS, Dylan, Cecil; Conway's Class::MultimethodsRFC 256 (18 Sep 2000); A6 (7 Mar 2003); Pugs 6.0.2 (9 Feb 2005)Julia (2012 paper cites CLOS, Dylan, Cecil, Diesel); C# 4 dynamic (Apr 2010); ClojureCommon ancestor (RFC 2564; Julia 20125)
Hyper, reduce, crossAPL; PDL and Numerical Python; List::Util reduceRFCs 76, 82 (10 Aug 2000); A3 ^op (2 Oct 2001); »op« (1 Nov 2002); X (12 Sep 2006); Pugs hypers 11 Mar 2005, 6.2.4 (24 May 2005)Julia dot-broadcast 0.5 (2016), fusion 0.6 (2017), citing Matlab, NumPy, RCommon ancestor (RFC 826; msg121387; 088e2dc8; Pugs r588; Julia blog9)
Lazy lists, gather/takeHaskell and Python (RFC 81); CLU, Sather, Icon generatorsA3 (2001); gather/take in A12 (16 Apr 2004); Pugs 6.2.0–6.2.4 (Apr–May 2005); Rakudo 13 Sep 2008PEP 255 (2001); JS 1.7 (2006); Kotlin sequence {} (2017); Rust RFC 3513 (10 Oct 2023)Common ancestor (RFC 8110; PEP 25511; RFC 351312; Rakudo dbadff7)
PipelinesUnix pipesFeeds in A6 (7 Mar 2003)Isabelle/ML |> (1994) → F# (2003) → OCaml 4.01 (12 Sep 2013); Elixir; TC39 (2015–)Common ancestor (A613; Syme14)
Predicate subtypesAda subtypes, which A12 creditsA12 (16 Apr 2004) as subtype, later subset; kp6 Aug 2007; Rakudo 27 Mar 2008Ada 2012 predicates (AI05-0153; GNAT, Oct 2010)Common ancestor (Ada) (ARM 3.2.4; GNAT patch; kp6; Rakudo aa2db27)
Success/failure scope blocksdesign by contract; C++ ScopeGuard (2000)KEEP/UNDO/PRE/POST in A4 (15 Jan 2002); Pugs 6.2.13 (17 Oct 2006)D on_scope_* (DMD 0.148, 25 Feb 2006), respelled scope(exit/success/failure) in 0.149 (7 Mar 2006); Go defer (spec 27 Jan 2009); Swift defer (2.0, 2015); Zig errdefer (Jan 2018); C N2895 and TS 25755 (draft)Common ancestor / independent; Swift and C borrowed from Go (D changelog15; D forum16; Go 4a903e017; Swift rationale18; Zig19; N289520)
Grapheme stringsUnicode UAX #29, NFC/NFDA5 level-2 graphemes (4 Jun 2002); NFG named (30 Jan 2009); MoarVM (24 Apr 2015)Elixir v0.7.1 (18 Nov 2012); Swift Character (2014); SE-0363 (2022)Common ancestor; NFG synthetics uncopied (Elixir changelog21; String Manifesto22)
Promise, Supply, react/wheneverRx; C#/.NET; Haskell, Go, ErlangS17 (3 Nov 2013); Rakudo 2013.07 (promises, JVM) to 2015.09 (react)PEP 492 (2015), Rust RFC 2394, Kotlin coroutines, all citing C#, JS, PythonFlowed into Perl 6 (Advent 201323; PEP 49224)
Pattern matchingML, Haskell, Scala, F#, Erlanggiven/when in A4 (15 Jan 2002)C# 7; Python 3.10 (PEP 622/634, 2020); Java 21 (JEP 441); Ruby case/in; PHP 8.0 match; TC39Common ancestor; none cites smartmatch (PEP 63525; JEP 44126)
Definedness in typesML option types; Spec#; Eiffel:D/:U in S12 ≤ 26 Jun 2009; Rakudo 2011.09Spec# (OOPSLA 2003); Eiffel attached types (2005); Ceylon (2011); Swift (2014); Kotlin 1.0 (15 Feb 2016); TypeScript 2.0 (2016); C# 8 (prototype Nov 2017); Dart 2.12 (3 Mar 2021)Common ancestor; Perl 6 not first (Wikipedia: Void safety27; Dart 2.12)
Meta-object protocolCLOS / AMOP, Smalltalk; Forman & DanforthRFC 92 (11 Aug 2000); A12 (2004)Python 2.2 metaclasses (Dec 2001)Independent; Python earlier (descrintro28)
C3 MRODylancanonical for Perl 6 and ParrotPython 2.3; Perl 5.10 mroCommon ancestor (Class::C329)
Macros, extensible syntaxLispmacros in A6 (2003); slangs in S02 (8 May 2009); Rakudo slangs 2014.06Julia (credits Lisp), ElixirCommon ancestor; slangs unadopted (Julia manual30; 5cfa62e31)
PEG framing of grammarsFord (POPL 2004), from TDPL/GTDPLrules in A5 (2002); S05 PEG overview added 5 May 2010LPeg (credits SNOBOL4); OMeta (2007); PEP 617 (2020); PestIndependent; vocabulary flowed into Perl 6 (Ford32; 52d207433; LPeg34)
What the sources say 34
  1. Larry Wall, Perl 6 language designer Apocalypse 12, perl.com source ↗

    Adopts the Traits paper's case for separating object management from code reuse and cites only that paper, but lets roles carry state, rejects renaming or excluding conflicting methods, and allows runtime mixins.

  2. Stefan Marr, author of PHP's traits RFC PHP RFC: Horizontal Reuse for PHP source ↗

    Lists Perl 6 among earlier adopters of traits, beside Scala, Squeak, Fortress, Slate and Self, and takes its bibliography from the Bern Traits papers; the traits part shipped in PHP 5.4.

  3. Brian Goetz, Java language architect at Oracle FOOL 2011 workshop abstract source ↗

    Presents Java's planned default methods as a restricted, stateless kind of traits, chosen because full traits were too large a change, with conflicting defaults left for the programmer to resolve explicitly.

  4. Damian Conway, RFC author Perl 6 RFC 256, Objects: Native support for multimethods source ↗

    Proposes built-in multimethod dispatch for Perl 6, contrasting the approach CLOS takes and pointing readers to his own Class::Multimethods module.

  5. Jeff Bezanson, Stefan Karpinski, Viral Shah and Alan Edelman, Julia's creators arXiv 1209.5145, Julia: A Fast Dynamic Language for Technical Computing source ↗

    Places Julia's generic functions in the tradition of CLOS and Dylan and alongside Cecil and Diesel, makes them its main abstraction mechanism, and never mentions Perl.

  6. Jeremy Howard, RFC author Perl 6 RFC 82, Arrays: Apply operators element-wise in a list context source ↗

    Proposes that operators act on lists element by element, giving the Perl Data Language and Numerical Python's array operations as its references.

  7. Larry Wall, Perl 6 language designer perl6-language, msg12138 source ↗

    Decides to keep French quotes for word lists and to write vector multiplication as »*«, with >>*<< for ASCII-only text and the bitshift operators renamed to make room.

  8. Larry Wall, Perl 6 language designer S03 version 59, Pugs svn r11969 (Raku/mu mirror) source ↗

    Adds X to S03 as a fifth metaoperator that pairs every element of one list with every element of the others, and lets a bare X serve as an operator itself.

  9. Steven G. Johnson, Julia developer Julia blog, More Dots: Syntactic Loop Fusion in Julia source ↗

    Describes Julia 0.6's fusing dot syntax for vectorized code, naming Matlab, NumPy and R as where that style is familiar and contrasting Chapel's automatic vectorization; Perl is not mentioned.

  10. Jeremy Howard, RFC author Perl 6 RFC 81, Lazily evaluated list generation functions source ↗

    Proposes lazily generated lists, pointing to Haskell's and Python 2's list comprehensions and to the range syntax used in Matlab and IDL.

  11. Neil Schemenauer, Tim Peters and Magnus Lie Hetland, PEP authors PEP 255, Simple Generators source ↗

    Some other high-level languages provide pleasant solutions, notably iterators in Sather, which were inspired by iterators in CLU; and generators in Icon, a novel language where every expression is a generator.

    The passage goes on to the idea they share: a function that hands its caller the next value and keeps its local state, so it can resume where it left off. Perl appears nowhere in the PEP.

  12. Rust project, RFC 3513 Rust RFC 3513, gen blocks source ↗

    Surveys generator designs as prior art, from CLU, Icon and Python to Kotlin, Swift, C# and Koka, without mentioning Perl or Raku.

  13. Larry Wall, Perl 6 language designer Apocalypse 6, perl.com source ↗

    Introduces the ==> and <== pipe operators for feeding lists, likening list operators to Unix commands that pass streams of data through pipes.

  14. Don Syme, F# designer Don Syme's Microsoft blog (archived) source ↗

    Traces F#'s pipeline operator to Isabelle/ML, publishing April–May 1994 emails among Paulson, Nipkow and Wenzel in which Tobias Nipkow settled on the |> name.

  15. Digital Mars, D changelog D changelog, DMD 0.140 to 1.0 source ↗

    Lists scope statements as new in DMD 0.148, then records that 0.149 respelled the three on_scope_* forms as scope(exit), scope(success) and scope(failure).

  16. Walter Bright, D's creator D newsgroup thread on DMD 0.148 (forum.dlang.org) source ↗

    Introducing scope guards, says the design derives from macros Andrei Alexandrescu wrote for C++ and describes it as something no other language offers.

  17. Robert Griesemer, Go co-designer (reviewed by Rob Pike) golang/go commit 4a903e0, defer statement source ↗

    Adds defer to the Go spec as a call postponed until the enclosing function returns, with its arguments evaluated at once and pending calls run last-in, first-out.

  18. John McCall, Swift compiler team Error Handling Rationale and Proposal, swift/docs source ↗

    Recommends that Swift adopt Go's defer in preference to Java's try/finally, but run deferred actions when their scope ends rather than when the function returns.

  19. Andrew Kelley, Zig's creator Zig: January 2018 in Review, andrewkelley.me source ↗

    Reports swapping Zig's error-handling sigils for keywords after newcomers complained, so that %defer became errdefer and %return became try.

  20. Jens Gustedt and Robert C. Seacord, WG14 paper authors WG14 N2895, A simple defer feature for C source ↗

    Proposes a defer feature for C modelled on Go's, with POSIX cleanup handlers, MSVC __try/__finally and GCC's cleanup attribute as existing practice; Perl is not mentioned.

  21. Elixir project changelog Elixir CHANGELOG, v0.7.1 entry source ↗

    Records that String.length, String.at and related functions now operate on graphemes.

  22. Dave Abrahams and Ben Cohen, Swift standard library team String Processing For Swift 4 (String Manifesto), swift/docs source ↗

    Grounds Swift 4's string redesign in Unicode grapheme clusters as defined by UAX #29 and mentions Perl only as the string-processing benchmark to beat; Perl 6 and NFG never appear.

  23. Jonathan Worthington, Rakudo developer Perl 6 Advent Calendar, day 19 source ↗

    Introduces Supplies as Perl 6's built-in support for reactive programming, tracing the idea from the duality of observers and iterators through the Rx library.

  24. Yury Selivanov, PEP author PEP 492, Coroutines with async and await syntax source ↗

    async/await is not a new concept in programming languages: C# has it since long time ago; proposal to add async/await in ECMAScript 7; see also Traceur project; Facebook's Hack/HHVM; Google's Dart language; Scala; proposal to add async/await to C++; and many other less popular languages.

    The PEP counts that familiarity as a benefit to programmers who already use async/await elsewhere. Perl appears nowhere in it.

  25. Tobias Kohn and Guido van Rossum, PEP authors PEP 635, Structural Pattern Matching: Motivation and Rationale source ↗

    In addition, this would put Python in a rather unique position: The underscore is as a wildcard pattern in every programming language with pattern matching that we could find (including C#, Elixir, Erlang, F#, Grace, Haskell, Mathematica, OCaml, Ruby, Rust, Scala, Swift, and Thorn).

    The passage defends _ as the wildcard: choosing anything else is what would make Python the odd one out. The motivation section names Haskell, Erlang, Scala, Elixir, Ruby and a JavaScript proposal; Perl appears nowhere in the PEP.

  26. Gavin Bierman, JEP owner (Oracle) JEP 441, Pattern Matching for switch source ↗

    Extends Java's switch to test a value against patterns, finalizing the feature for Java 21, and names no other language as a model.

  27. Wikipedia article Void safety source ↗

    Credits Bertrand Meyer with the term void safety, dates Eiffel's attached types to ECOOP 2005, and says Ceylon has had union-type null safety since 2011.

  28. Guido van Rossum, Python's creator Unifying types and classes in Python 2.2, python.org source ↗

    Explains Python 2.2's new metaclasses and method resolution order, crediting the Forman and Danforth book Putting Metaclasses to Work for the MRO change and for the term cooperative method.

  29. Stevan Little, Class::C3 author Class::C3 documentation, CPAN source ↗

    Traces C3 from Dylan through Python 2.3 and reports that Perl 6 chose it as the standard MRO for classes and Parrot as its default for objects.

  30. Julia documentation Julia manual, Metaprogramming source ↗

    Calls metaprogramming Lisp's strongest legacy in Julia, offering true Lisp-style macros that work on abstract syntax trees.

  31. Larry Wall, Perl 6 language designer Raku/old-design-docs commit 5cfa62e (S02) source ↗

    Makes a first attempt in S02 at explaining how several languages are braided into one program, the first time the words slang and braid appear in the spec repository.

  32. Bryan Ford, originator of PEGs Parsing Expression Grammars: A Recognition-Based Syntactic Foundation, POPL 2004 source ↗

    Defines parsing expression grammars, tracing them to Birman's TS/TDPL and gTS/GTDPL formalisms and to Aho and Ullman, and never mentions Perl.

  33. Larry Wall, Perl 6 language designer Raku/old-design-docs commit 52d2074 (S05) source ↗

    Adds to S05 an overview describing Perl 6 patterns as a native implementation of parsing expression grammars, together with explicit tiebreaking rules.

  34. Roberto Ierusalimschy, Lua's chief architect A Text Pattern-Matching Tool based on Parsing Expression Grammars (LPeg paper) source ↗

    Presents LPeg as a PEG-based matcher whose first-class pattern style comes from SNOBOL4; its Perl references concern only Perl 5 regexes and a benchmark.

Roles are the best-documented common-ancestor case, and the direction is unambiguous. A12 accepts the Traits paper's argument that classes should not manage both objects and code reuse and lists that paper as its only reference, while departing from it in three ways: roles may hold state (a point Wall defended on perl6-language in December 2003), conflicts are not resolved by renaming or excluding methods, and roles can be applied at runtime as mixins (A121; perl6-language35). The Traits authors then listed Perl 6 roles as an adopter in their 2006 TOPLAS paper, next to Scala (TOPLAS 200636). PHP, Java 8 and Groovy cite the Traits papers or the mixin tradition rather than Perl 6; Java's designers described default methods as a limited, stateless form of traits (FOOL 20113). Multiple dispatch is the same story with CLOS in place of Squeak: Julia's 2012 paper places itself with CLOS, Dylan, Cecil and Diesel (Julia 20125), and Stefan Karpinski later said that even CLOS was not a motivation and that Julia's resemblance to Fortress came from shared problems (julia-dev37). Hyper-operators and Julia's dots both mark element-wise application syntactically instead of vectorizing implicitly — A3 made that choice in 2001 with a joke about APL, Julia made it against Chapel in 2017 citing Matlab and NumPy (A338; Julia blog9) — which is convergence on a principle, not transmission.

What the sources say 4
  1. Larry Wall, Perl 6 language designer, replying to Stéphane Payrard perl6-language, Vocabulary thread source ↗

    Answering a remark that the Smalltalk traits paper made roles stateless, notes its authors meant to study state and says a role may also supply attributes.

  2. Stéphane Ducasse, Oscar Nierstrasz, Nathanael Schärli, Roel Wuyts and Andrew Black, the Traits authors ACM TOPLAS 28(2), Traits: A Mechanism for Fine-Grained Reuse source ↗

    Lists traits as standard in Scala and implemented for Perl 5, and reports work under way to build them into Perl 6, where they are called roles.

  3. Stefan Karpinski, Julia co-creator julia-dev mailing list source ↗

    Says resembling CLOS was never a goal for Julia and that its likeness to Fortress arose because both languages faced similar problems rather than from mutual inspiration.

  4. Larry Wall, Perl 6 language designer Apocalypse 3, perl.com source ↗

    Accepts RFC 82's element-wise operators as hyper operators marked by a leading caret, joking that APL is next, and has them stretch a scalar across a missing dimension.

KEEP/UNDO is the strongest unrewarded priority claim in control flow. A4 specified blocks that run only on success or only on failure in January 2002 (A439); D shipped the same split as on_scope_success and on_scope_failure in DMD 0.148 on 25 February 2006 and respelled them scope(success) and scope(failure) in 0.149 on 7 March, with Walter Bright crediting Alexandrescu's C++ scope-guard macros and calling the feature one no other language had (D changelog15; D forum16). That claim, four years after A4, is direct evidence that D's designer did not know KEEP/UNDO, and it fits his 2001 answer to whether D echoed Perl 6, that "any similarities are entirely coincidental" (post40), so D's look-alikes count as convergent on its designer's own word. Go's defer entered the spec in Robert Griesemer's commit of 27 January 2009, replacing a to-do item for an onreturn/undo statement, a lexical echo of UNDO with no evidence of a link, and Swift's defer (2015) is documented as Go's, tied to scope exit (Go 4a903e017; Go 1593ab641; ErrorHandlingRationale18). Zig's errdefer (2018) grew out of Zig's own error sigils (Zig19). For an implementer the most useful distinction comes from Perl 5's PPC0004: Raku phasers are compile-time declarations activated by their presence, while defer is a statement that takes effect only if execution reaches it (PPC000442). No counterpart to the ENTER, FIRST, NEXT or LAST phasers was found in any mainstream language.

What the sources say 4
  1. Larry Wall, Perl 6 language designer Apocalypse 4, perl.com source ↗

    Specifies KEEP blocks that run only on success and UNDO blocks only on failure, pairs POST with PRE for design by contract, and renames switch/case to given/when after discussion with Conway.

  2. Walter Bright, D's creator D newsgroup (forum.dlang.org) source ↗

    When asked if D borrowed from Perl 6's design, replies that he has not followed Perl 6, so any resemblance is coincidence.

  3. Robert Griesemer, Go co-designer golang/go commit 1593ab6, spec to-do cleanup source ↗

    A tidy-up of the Go spec's open items keeps an entry noting that the language still lacks an onreturn/undo statement.

  4. Paul Evans, Perl core developer Perl PPC 0004, Deferred block syntax source ↗

    Explains the block was first named LEAVE, dropped because Raku's LEAVE behaves differently, and that Raku's phaser blocks take effect at compile time merely by being declared, whereas defer acts only once execution reaches it.

Graphemes reverse the usual timing. Raku specified grapheme-level characters in 2002 but shipped them in April 2015, while Elixir made String.length grapheme-aware in November 2012 and Swift built Character on grapheme clusters in 2014, both grounded in UAX #29 with no Perl 6 citation (Elixir changelog21; Swift book43); Ilseman later acknowledged Perl 6 only as a peer supporting grapheme-cluster regex semantics (forum #10044). NFG's distinctive contribution — synthetic codepoints giving O(1) grapheme indexing — remains uncopied (MoarVM strings45). Julia weighed it in writing during its 2016 string redesign and rejected it as sensible only for strings starting from UTF-32 and wasteful of memory; a Perl 6 developer in the same thread warned that the Parrot write-up being discussed had always been aspirational, so the rejection rested partly on that older text rather than on MoarVM (#1438346; comment47). The :D/:U smileys likewise arrived after Spec# and Eiffel's attached types, and they are a binder-checked definedness constraint rather than a sum type or a flow analysis, so a claim that Perl 6 had null safety first is not defensible (04840a348). Grammars show influence flowing into Perl 6's vocabulary after the fact: Ford's 2004 PEG paper does not mention Perl (Ford32), and Larry Wall added the description of Perl 6 patterns as a native PEG implementation to S05 only on 5 May 2010 (52d207433).

What the sources say 6
  1. Apple, The Swift Programming Language Strings and Characters chapter source ↗

    States that each Swift Character value represents one extended grapheme cluster.

  2. Michael Ilseman, Apple's String and regex lead Swift Forums, Declarative String Processing Overview, post 100 source ↗

    Notes that certain regex engines can match by canonical equivalence or by grapheme clusters, adding that he believes Perl 6 did.

  3. Samantha McVey, MoarVM developer Strings in MoarVM, MoarVM docs source ↗

    Describes MoarVM's NFG string form, which extends Unicode NFC, held in fixed-width arrays where negative values stand for synthetic graphemes of several codepoints.

  4. Milan Bouchet-Valat, Julia member JuliaLang/julia PR #14383, string redesign source ↗

    Rejects NFG-style synthetic graphemes for Julia, arguing they suit only strings that start as UTF-32, not UTF-8, and waste a great deal of memory.

  5. diakopter, Perl 6 contributor JuliaLang/julia PR #14383, string redesign source ↗

    Tells the Julia developers that Parrot's PDD 28 string design had always been aspirational and only loosely shaped the Rakudo and MoarVM implementation.

  6. Larry Wall, Perl 6 language designer Raku/old-design-docs commit 04840a3 (S12) source ↗

    Adds the Int:D type modifier to S12, restricting a parameter or variable to defined Int instances.

Many famous Perl 6 features were imported, often from Perl 5 CPAN.

Perl 6 featureSourceSource datePerl 6 date
JunctionsConway's Quantum::Superpositions, which added any and all (Quantum::Superpositions49)CPAN, 9 Aug 2000RFC 225, 14 Sep 2000, which points readers to the module (RFC 22550)
given/whenConway's Switch.pm (Switch51)CPAN, 7 Aug 2000Conway's switch RFC 22, 4 Aug 2000; renamed in A4 after Wall worked through options with Conway (A439)
reduceGraham Barr's List::Util (RFC 7652)before 2000RFC 76, 10 Aug 2000
MultimethodsConway's Class::Multimethods and CLOS (RFC 2564)before 2000RFC 256, 18 Sep 2000
PRE/POST handlersConway's Class::Contract (RFC 27153)before 2000RFC 271, 20 Sep 2000
What the sources say 5
  1. Damian Conway, module author Quantum::Superpositions, CPAN source ↗

    Adds any and all operators to Perl 5 that merge several values into one superposed scalar; Perl 6 goes unmentioned in its documentation.

  2. Damian Conway, RFC author Perl 6 RFC 225, Data: Superpositions source ↗

    Proposes, in earnest, any and all operators that give Perl 6 superposition types, and points readers to the Quantum::Superpositions module.

  3. Damian Conway, module author Switch, CPAN source ↗

    Provides a switch statement for Perl 5; later releases note that Perl 6 will spell it given and when and offer a Perl6 mode using those keywords.

  4. Damian Conway, RFC author Perl 6 RFC 76, Builtin: reduce source ↗

    Proposes a built-in reduce for Perl 6, modelled on the reduce subroutine in Graham Barr's List::Util module.

  5. Damian Conway, RFC author Perl 6 RFC 271, Subroutines: Pre- and post- handlers for subroutines source ↗

    Proposes pre- and post-handlers for subroutines, extending the approach of his Class::Contract module to a general mechanism for handlers.

The switch module and its RFC appeared within three days of each other from the same author, so they were parallel prototypes rather than a clear sequence. The design documents also openly credit outside languages: Haskell for currying (RFC 23) and laziness (RFC 81) (RFC 2354), APL for hyper-operators and Ada for subtypes, Prolog for the regex cut and for := binding as a kind of unification (A555), Ruby for unary * flattening and, by Wall's own joke about turning up the Ruby-o-meter, for the July 2004 switch to "{ expr }" closure interpolation (msg1788556), Java for interfaces (RFC 265), Unix command lines and Perl 5 I/O layers for colon-pair adverbs, Rx for Supplies (Advent 201323), and — per Wall in 2016 — Haskell, Go, Erlang and C# for the concurrency model (Slashdot 201657). Three commonly repeated attributions — Icon for gather/take, Eiffel by name for PRE/POST, and Smalltalk — have no primary Perl 6 statement behind them and are third-party glosses.

What the sources say 4
  1. Damian Conway, RFC author Perl 6 RFC 23, Higher order functions source ↗

    Proposes the ^_ placeholder as a cleaner way to create curried, higher-order functions, citing a Haskell tutorial as an existing implementation.

  2. Larry Wall, Perl 6 language designer Apocalypse 5, perl.com source ↗

    Calls its backtracking controls variants of Prolog's cut, and says a proposal for matching on Perl data structures reminds Wall of Prolog unification.

  3. Larry Wall, Perl 6 language designer perl6-language, Re: String interpolation, msg17885 source ↗

    Proposes that double-quoted strings interpolate only backslash escapes, variables with subscripts and {EXPR} closures, so method calls need braces, a change he jokes turns up the Ruby-o-meter.

  4. Larry Wall, interviewed by Slashdot readers The Slashdot Interview With Larry Wall source ↗

    Says other languages took Perl 5's regexes, jokes that a PHP borrowing enough to be consistent would have reimplemented Perl 6, and credits C#, Erlang, Go and Haskell for Perl 6's concurrency ideas.

What nobody adopted is as informative as what spread. Junctions have no adopter outside Perl 5 CPAN ports: Python's any()/all() are eager reductions, Perl 5.42 explicitly refused junction semantics (PPC002758), a Swift Language Workgroup member advised against them in 2023, F#'s designer declined junction-style comparison in 2022, and PHP and D saw only wishes and a library experiment (Swift #1059; F# #67560; PHP61; D62). Hyper-operator syntax, Whatever-currying (raised for GHC only in an open 2026 pre-proposal, #75463), NFG synthetics, grammars as subclassable classes (only the % separator modifier reached a Rust grammar tool, internals #864), slangs, the ENTER/FIRST/NEXT/LAST phasers and the :D/:U smileys likewise have no documented counterpart elsewhere, and dynamically scoped take remains Raku's alone, since Kotlin's sequence {} forbids suspension from called functions by design and Python and JavaScript need yield from/yield* (KEEP coroutines65).

What the sources say 8
  1. Paul Evans, Perl core developer Perl PPC 0027, More list processing operators inspired by List::Util source ↗

    Adds any and all list keywords modelled on List::Util, and rejects making them junctions, since junction values need no special syntax and can live in ordinary modules.

  2. Becca Royal-Gordon, Swift Language Workgroup Swift Forums, substring-searching pitch, post 10 source ↗

    Likens the pitch to Raku junctions and advises against them, citing hidden loops that obscure time complexity and harm to type-checking, and suggests shipping a package instead.

  3. Don Syme, F# designer fsharp/fslang-suggestions issue 675 source ↗

    Declines the suggestion, saying F# itself will not add it because programmers already have several ways to express it; a 2018 commenter had likened it to a Perl 6 junction.

  4. Rowan Collins, PHP internals contributor php.internals, intersection types RFC thread source ↗

    Wishes PHP had something like Perl 6 junctions, giving an instanceof test against any of several classes as an example.

  5. Mafi, D forum user D newsgroup (forum.dlang.org) source ↗

    Reports an attempt to implement Perl 6-style junctions in D as a library.

  6. Jaro Reinders, GHC proposals contributor ghc-proposals issue 754, Dash sections source ↗

    Floats an explicit marker for Haskell tuple sections, citing Raku's Whatever star beside placeholders in Scala, Lean, C++, Mathematica and PureScript as prior art.

  7. eddyb, Rust compiler contributor Rust internals forum, Proposal: Grammar Working Group, post 8 source ↗

    Describes the separator forms of the proposed grammar notation, written with %, attributing that syntax to Perl 6 from memory and crediting eternaleye with suggesting it.

  8. Andrey Breslav and Roman Elizarov, Kotlin language designers Kotlin KEEP, Kotlin Coroutines design proposal source ↗

    Cites C# and Python for yield-based lazy sequences and C# and JavaScript for async/await, and builds sequence {} on restricted suspension; Perl is never mentioned.