Slash Boxes
NOTE: use Perl; is on undef hiatus. You can read content, but you can't post it. More info will be forthcoming forthcomingly.

All the Perl that's Practical to Extract and Report

use Perl Log In

Log In

[ Create a new account ]

audreyt (6654)

  (email not shown publicly)

Journal of audreyt (6654)

Thursday July 31, 2008
03:01 AM

Pugs.hs is back.

(The excellent news from fglock++ that is back prompted me to write something about Pugs, too, so here it is.)

During the past month, I've been quietly releasing Pugs and its dependencies on Hackage.

Installation for Pugs is now much simpler than before; see for details.

There has been no action in terms of features, but the internal has been refactored to reduce compilation time, and the individual components has been released as separate packages to reduce maintenance overhead.

Startup time is also greatly improved. As a consequence, running the full smoke test suite is no longer a multi-hour-long ordeal; it now takes less than 15 minutes on modern machines.

As of the release, the smoke numbers say it passes 17215 tests out of 19260, which is not significantly different from the 6.2.13 release.

Going forward, I think GHC 6.10's Quasiquoting and View patterns are going to be vital for the sanity of Pugs internals, so please expect no Pugs 6.28.* releases before GHC 6.10.1.

And finally, a shameless plug: I'm still looking for ways to make ends meet, so any offers of telecommuting, project-based/part-time jobs would be very much appreciated. :-)

Tuesday February 20, 2007
12:08 AM

Intermission over.

Initially, I thought it was typical burn-out. Between the intense Brazil hackathon (with fglock++, incrementally-built bootstrapping compilers; with cmarcelo++, metaobjects in Haskell for 6.28.0) and moving to a new residence, a few weeks of rest seemed natural.

As the sudden drowsiness and strange non-motivation worsened, I thought it's some kind of mental block, and focused on Jifty instead.

But when external emergencies demanded my attention, all focus was suddenly lost, replaced by massive panic and self-doubt, leading to e.g., the cancellation of my POPL trip just before boarding.

At last, nine days ago, I was hospitalized at the brink of liver failure. Months of intellectualization and analysis was proved immaterial, as there is one very simple explanation: Acute Hepatitis B. The symptoms quickly ceased, thanks to lamivudine, and I expect to be discharged tomorrow, with 95%+ chance of full (immune, non-carrier) recovery.

With the nearest $job/conference safely booked at one month away, I've put various unpleasantries behind me, started populating the new workspace, and resumed Pugs hacking (aiming for a March release of the much-delayed 6.28.0).

So... Stay tuned for backblogs on the progress happened during my absence. Viva la vie!

Tuesday October 17, 2006
08:32 AM

Pugs 6.2.13 released!

After nearly four months of development and 3400+ commits, I'm very glad to announce that Pugs 6.2.13 is now available:
SIZE: 6839270
SHA1: b06b8434c64e9bb5e3ab482282fbae0a6ba69218

Motivated by increasing use of Pugs in production, this is an extra release in the 6.2.x series, offering another 200%+ improvement in performance, comprehensive support for interoperability with Perl 5 modules, a built-in grammar engine via native perl5 embedding, and much better support for roles, classes and objects.

The web-based presence of Pugs and Perl 6 has improved as well:

Thanks again to all lambdacamels on #perl6 for building this new ship together; it is truly an exhilarating voyage. :-)

Have -Ofun!

Changes for 6.2.13 (r14402) - October 17, 2006

Build System

  • Perl 5 embedding is now enabled by default
    • For Windows users, Perl 5.8.x is required
    • Set the PUGS_EMBED environment variable to noperl5 to disable this
  • Prompting for Parrot embedding is now disabled by default
    • Set the PUGS_EMBED environment variable to parrot to enable this
  • Support for compiling using GHC 6.6
    • GHC 6.4.1+ is still supported, but 6.6 will be required in the next release

Feature Changes

Interactive Shell and Command-Line Flags

  • New pugs -d flag to display a trace for debugging
  • The :r command now resets the environment once, not twice
  • The return value of blocks, such as gather {...}, is displayed correctly
  • $_ is no longer clobbered with the result of each expression's evaluation

Perl 5 Interoperability

  • Arrays and Hashes now round-trip from Pugs to Perl 5 land and back
  • Importing functions from Perl 5: use perl5:CGI <header param>
  • Passing unboxed values across runtimes no longer leaks memory
  • When embedding Perl 5.8+, Unicode flag is now on for Pugs-to-Perl5 strings
  • eval($str, :lang<perl5>) now accepts non-ASCII characters in $str

Lexical Syntax

  • Capture literals: \($bar: 1, 2, 3, named => 4)
  • Here-docs now work as specced; also warns against inconsistent indentation
  • Interpolation of chained calls: "$foo.meth.meth.meth.meth()"
  • List comprehension: for 0 < list(@x) < 10 {...}
  • Named character escapes: "\c[LATIN CAPITAL LETTER Y]"
  • New grammatical category term:, separated from the prefix: category
  • New magical variables: $?COMPILER and $?VERSION
  • Parse for LABEL: STMT, although it's currently treated the same as STMT
  • Pod directives: =begin/=end and =for now terminate without =cut
  • Pod variables: $=FOO and @=FOO give you access to the Pod section FOO
  • Quote adverbs no longer take non-parens brackets: rx:P5{...} is valid again
  • Shell-like quoting rules implemented for << $x "qq" 'q' >>
  • Signature literals: :($foo is copy = 42, $, @)
  • Support for UTF-8, UTF-16 and UTF-32 encoded source files
  • Support for backquotes and qx/.../ for capturing external command output
  • User-defined infix associativity: sub infix:<foo> is assoc('right') {...}
  • "\123" and "\03" are now errors; write "\d123" and "\o03" instead
  • $::x now means exactly the same a $x, instead of $*x
  • %h<> now means %h{} -- the entire hash, not the empty string as key
  • ($::('x')) with two adjacent closing parens now parses correctly
  • 0_123_456 now parses as 0d123456, not an error
  • 1<2> is now a fatal error: Odd number of elements in Hash
  • q() and qw() with parentheses are parsed as functions, not quotes

Declarators and Operators

  • Argument interpolation via prefix | and |<<
  • Binding to qualified uninitialised symbols: &fully::qualify := sub {...}
  • Contextual variables are now declared with my $x is context, not env $x
  • Hyperised reduce operators: [>>+<<] and [\>>+<<]
  • Implicit invocation assignment: .= uc is parsed as $_ = $_.uc
  • Mid-block redeclaration no longer allowed: my $x; { $x = 1; my $x = 2 }
  • Negated comparison operators: !eqv, !=:= etc; !~~ replaces !~
  • New infix comparison operators: === and eqv
  • New infix non-short-circuiting boolean AND operator: ?&
  • Nullary reduction of builtin operators gives identity values: [*]() === 1
  • Postfix operators can be called with a dot: .++, $x.++, $x.\ ++
  • Prefix = now iterates on arrays as well: =@array
  • Short-circuiting chained comparison: 1 > 2 > die('foo') no longer fails
  • Smart matching against code objects: $obj ~~ { 1 > $_ > 5 }
  • Smart matching against implicit invocation: $obj ~~ .meth, $obj ~~ .[0]
  • Typed constraints on autovivification: my Hash $x; $x[0] = 1 now fails
  • Typed declarations: my Dog $fido, my T ($x, $y)
  • * is now always a term, never a prefix operator

Blocks and Statements

  • Implicit invocation in when: when .true {...} , when .<key> {...}
  • Listops in conditions no longer consume the block: for say {...}
  • Loop topics are not forced into rw: for 1..3 { $_++ } now fails correctly
  • New &break and &continue primitives for use within when blocks
  • New &leave primitive for exiting from the innermost block
  • New postfix given statement modifier: .say given foo()
  • Support for FIRST, NEXT, LAST loop control blocks
  • Support for START, PRE, POST, KEEP, UNDO, ENTER, LEAVE blocks
  • Support for repeat blocks: repeat {...} while 1, repeat while 1 {...}
  • Support for the &each list interleaver: for each(@a; @b) -> $x, $y {...}
  • The for loop no longer double-flattens lists: for %h.pairs -> $p {...}
  • Topicalisers for if, else, while, given blocks: if EXPR -> $x {...}
  • Topicalisers for postfix for loop: -> $x {...} for 1,2,3
  • &last and &redo now work in repeat {...} and loop {...} blocks
  • &take no longer flattens array literals: take [1,2,3];
  • &take now works in functions called from within a gather {...} block
  • BEGIN(...), END(...), etc., are now parsed as calls, not syntax errors
  • END {...} in .pm files are no longer ignored when executed directly
  • INIT {...} now works correctly inside eval "..."
  • do {...} is now a loop block that takes standard loop controls
  • do {...} with statement modifiers is explicitly disallowed

Regexes and Grammars

  • Anonymous tokens and rules anchor on both ends: 123 ~~ token{2} is false
  • New s[...] = EXPR and s[...] = .meth syntax; s[...][...] is deprecated
  • New tr/// syntax for transliteration; y/// will not be supported
  • Pugs::Compiler::Rule (PCR) replaces Parrot/PGE as the default engine
  • Support for :c/:continue, <prior>, and much more: see PCR's ChangeLog
  • $(), @() and %() parse correctly as $$/, @$/ and %$/
  • /.../ matches $_ under Int, Num and void context in addition to Bool
  • m:g/(1)|(2)/ now returns only successfully matched subcaptures

Modules and Routines

  • Allow space-separated adverbial named arguments: f( :x<foo> :$y :!z )
  • Multi-dispatching now handles named, slurpy and optional arguments
  • Multi-dispatching now handles parenthesized expressions as arguments
  • Named arguments with no matching parameters is now an error
  • New &$capture) method to call without a caller frame (similar to Perl 5's goto &sub, but it returns)
  • New &c.signature method to get a Signature object from a Code object
  • Parse for the proto routine modifier: proto method foo ($x) {...}
  • Precompiled .pm.yml files with mismatching AST version will no longer load
  • Support for user-defined unary and optional-unary prefix macros
  • The main package is now ::Main, not ::main
  • &?CALLER_CONTINUATION is now fully reentrant
  • &yield in coroutines works correctly within loop blocks
  • sub ($x = 0 is copy) no longer allowed; say sub ($x is copy = 0) instead
  • sub f ($x is lazy) {...} no longer evaluates $x more than once
  • sub f (@x?) {...}; f() now sets @x to [], not [undef]

Classes and Objects

  • Attribute-like method call syntax: @.method(1), $.method: 2, 3, 4
  • Class attributes: class C { my $.x is rw }
  • Class name literals are now term macros, not prefix functions
  • Compile-time self-mixin no longer allowed: role A does A
  • Default initialiser expression for attributes: class C { has $.x = 123 }
  • Dot attributes are now method calls: @.x is the same as @(self.x)
  • Dynamic method calls: $obj.$meth
  • Hyperised method calls: $obj.>>meth
  • Quantified method calls: $obj.*meth, $obj.+meth and $obj.?meth
  • Reopening classes: class C is also {...}
  • Role mixins: role R {...} class C does R {...}
  • $?SELF is gone; write self instead
  • BUILDALL/DESTROYALL trigger once per class even with diamond inheritance
  • does R and is C statements in class body now evaluate in compile time

Built-in Primitives

  • New &HOW, &WHAT and &WHICH functions replace &meta, &ref and &id
  • New &VAR macro to force lvalue evaluation of an expression
  • New &comb function, a dual to &split but matches the wanted parts
  • New &crypt function to create one-way digest strings
  • New &fork function to create a new process
  • New &printf function for formatted printing
  • New &quotemeta function for escaping strings
  • Support for %b in formatted printing
  • The &system function no longer dies when the command does not exist
  • The .as method is renamed to .fmt for formatted printing
  • The .perl method now returns Unicode strings

Bundled Modules

New modules


  • A new as_yaml method to dump CGI parameters as YAML
  • Allow initializing the CGI object with a hash of parameters
  • New Dump function adapted from Perl 5's
  • New basic tests for escapeHTML and unescapeHTML, which were broken
  • New tests for PATH_INFO
  • Only send the Content-Type: header if we actually have a content-type
  • Only send the Status: header if it's a redirect, or if it's explicitly added
  • Refactored into an OO-only module. N.B.: this breaks backwards compatibility!
  • Some work on charset handling, though a charset method is still missing
  • The content_type method is renamed to type for compatibility
  • The cookies attribute is renamed to cookie for compatibility


  • The old non-standard ./method syntax has been replaced with self.method


  • Significant updates to the lib/Rosetta/SeeAlso.pod documentation


  • Renamed from ext/Relation/
  • Beginning of separate Set::Tuple and Set::Relation classes


  • Converted documentation from Kwid to Pod syntax
  • The eval_ok and eval_is functions are gone; use is eval instead, which runs its string in the current lexical scope rather than in Test's (which is usually what you want)

Test Suite


  • Can now run only a portion of the test suite, or even a single file
  • Original shell script rewritten in Perl 5 for improved portability
  • Support for multiple Pugs backends and multiple Perl 6 implementations



  • See the SYN links on for this in action
  • Smoke client now uploads raw .yml results as well as .html
  • The smokeserver now annotates the spec with test results using smartlinks


  • All tests now begin with use v6-alpha; instead of use v6;
  • Many, many more smartlinks have been added into the spec
  • Programs and modules in examples/ are tested for syntactic correctness
  • Tests in t_disabled/ are merged back into the main test suite
  • t/02-test-pm/ created to ensure that works as advertised
  • t/blocks/ renamed from t/subroutines/
  • t/closure_traits/ created to test closure traits (FIRST, LAST, etc.)
  • #!/usr/bin/pugs is gone from all test files
  • eval_ok and eval_is are now ok eval and is eval, so that eval'd strings will be run in the current lexical scope

Examples and Utilities


  • All Perl 5 programs have been renamed from *.p5 to *

  • All Perl 6 programs have been renamed from *.p6 to *.pl
  • All references to them, except in talks, have been likewise updated


  • A game to test your knowledge about Perl 6's multi-dispatch system


  • A web teminal for running an interactive Pugs shell on the web
  • WebTerminal: a library for building web terminals for interactive shells
  • See for a live demo






  • Slides from Nathan Gray's Practical Extraction with Perl 6 talk

Perl 6 on Perl 5


  • The implementation of Perl 6 now handles ./pugs -CPerl5 commands
  • See its own ChangeLog for more information


  • A new subproject to write a Perl 6 compiler in Perl 6
  • Bootstrapped from the compiler on the perl5 runtime
  • See its own ChangeLog for more information

Experimental projects


  • Converts Perl 5.9.4+'s YAML syntax tree into Perl 6
  • Handles regexes, arrays, hashes and many builtin functions
  • See its own documentation for more information


  • Converts Perl 5 regex into Perl 6
  • See its own documentation for more information


  • An Perl 6 implementation on Ruby 1.9+
  • See its own documentation for more information
Tuesday July 11, 2006
12:31 PM

Parrot Summary (corrected): 2006-02-13 through 2006-02-28

This is the Perl 6 Internals correction summary, for the weeks of 2006-02-13 through 2006-02-28, by Ann Barcomb.

Summary updates

Thank you to everyone who took the time to point out that I had accidently used February 2003 rather than 2006 for the internals section. This is the actual summary for February 2006.

Due to the comments received on short URLs, I have decided to use the originals, as I also prefer them.

Internals (Parrot-Porters)

This mailing list has been previously called perl6-internals. It is now known as parrot-porters, but the perl6-internals name will remain as an alias for now.

Delayed release

Leopold Toetsch announced the delay of the next release. The German Perl workshop and a hackathon with Audrey Tang were responsible.

Bug: PGE - truncating PIR code generated by p6rule

Allison pushed some code and a test which isolates a failing test in punie so that others could aid in debugging. Joshua Isom reported success on two platforms, but noted other problems he encountered, which Allison recognized as known Parrot::Test bugs. Some debugging took place.

Addressing unowned bugs

Joshua Hoblitt requested that people with RT privileges spend a few minutes on the queue attempting to resolve a few bugs and wondered if RT could be configured to leave bugs marked as 'new' until they are owned.

Request for a clean bailout mechanism

In December, Joshua Hoblitt created a ticket [perl #37930] requesting a clean way for a step to signal a failure. As of February's r11568, all configuration steps were modified.

Param count mismatch errors enabled

Leopold Toetsch posted that param count mismatches now throw exceptions, but result/return count mismatches are still not checked. He included a list of failing tests from r11570 which were affected by this change.

Better gdb support

Leopold Toetsch changed the syntax for registers in r11581.

Punie test failures in set_node method on Solaris/SPARC

Allison Randal passed on a reported failure on Solaris/SPARC [perl #38584].

In another thread, Andy Dougherty looked into the problem and gave his test results.

Trace improvements

Leopold Toetsch gave a summary of some recent trace improvements. They were as follows: trace output runs through a dedicated debug interpreter, the output has been beautified, and tracing in to a file is faster.

Test failures with 'long long' on i386/linux

Andy Dougherty reported that this failure persists if one uses 64-bit opcodes on a 32-bit system. He was not especially concerned about the failure as he had explicitly created the situation in order to test the bug in its original context.

Deprecated PMCs

In January, Leopold Toetsch indicated that FloatvalArray and StringArray would be removed soon. As of r11602, they were removed.

Future JIT compiler improvements

Leopold Toetsch related a short list of desired JIT compiler improvements from [perl #38593].


Leopold Toetsch announced an upcoming release and put a code freeze on feature changes.

Later he started releasing 0.4.2 and blocked all checkins.

And finally, the release was complete.

WRT *BooleanArray

Leopold Toetsch commented that the resizeable variant is broken, and had some comments on what *BooleanArray should support. Matt Fowles agreed with most of the *BooleanArray reductions, while Bob Rogers had some questions. Bernhard Schmalhofer also spoke up. After seeing the support for the methods, Leopold Toetsch decided they should remain.

Configure dependencies fix bug closed

Joshua Hoblitt closed a ticket [perl #31138] which was not addressed and was no longer applicable.

Question on t/pmc/array.t with a negative length to an array

Karl Forner asked a question about list_set_length, which puzzled him by accepting negative sizes. He requested a pointer to documentation describing the behavior of the routine.

Deprecated --expnetwork in

In October, Will Coleda noted that --expnetwork from was an unused option which should probably be removed [perl #37388]. More recently, Joshua Hoblitt requested clarification and Leopold Toetsch agreed with the removal.

Performance-adding profiling build options

Joshua Hoblitt inquired as to whether [perl #31156] was worth implementing. Leopold Toetsch asked how to add CFLAGS from a perl command, and Joshua replied.

Truncating results of factorial test on Parrot examples page

Back in September 2005, James Ghofulpo asked in [perl #31980] if the factorial example was meant to truncate results. Bernhard Schmalhofer confirmed that he got incorrect results running the example. Leopold Toetsch noted that most of the examples are outdated. There was a call to fix the factorials, and in February Joshua Hoblitt asked what had become of the example. Leopold Toetsch replied that it had been removed because it was broken.

undef != undef

As long ago as December 2004, Simon Glover created a ticket [perl #33603] noting that undef != undef. Leopold Toetsch tried to explain why undefs have to be distinct currently. A patch was proposed, but rejected, and in February Joshua Hoblitt asked for some resolution on the issue.

Ways to help

Karl Forner, a mailing list subscriber, expressed interest in helping to develop Perl6 and Parrot and asked what he could do. He was welcomed by Bernhard Schmalhofer, who proposed a starting place. Allison Randal responded to the suggestion of a FAQ for contributors by asking if Karl could start by making one.

Questions with building parrot-0.4.1 on Win32

Sisyphus asked if there was an appropriate place for asking questions relating to building Parrot, and then asked some questions relating to a Win32 build. Jonathan Worthington confirmed that this was the right list and offered suggestions. Nick Glencross also offered advice. versus causes problems on case-insensitive filesystems

Chris Dolan reported [perl #38604] that Mac OS X had a problem with these two files. Bernhard Schmalhofer indicated that this was due to an svn move, which caused problems with svn update on case-insensitive filesystems.

Big steps for Lua

Francois Perrad reported that Lua on Parrot took some large steps forward.

Linking in docs

Karl Forner believed that the documentation created by 'make html' were more useful than the documents on the parrotcode website. He asked a bit about the linking process, and Will Coleda answered.

Input/Output encoding filters

Steve Gunnell recapped that back in December he had a question about UTF-8 I/O. This led to some thoughts and a proposal on encoding filters. Leopold Toetsch and others offered comments.

Subversion server upgrades

Robert Spier announced some downtime for the subversion server.

Question on namespaces and classes

Leopold Toetsch asked for some thoughts on his proposals dealing with namespaces and classes. Jonathan Worthington and Chip Salzenberg replied.


Matt Diephouse posted a much-awaited namespace specification draft and requested comments. He received plenty.

Announcement: Amber for parrot 0.4.2 (Argument)

Roger Browne announced this release.

Applied patches


chromatic recruited me at YAPC::NA 2006, and Jesse Vincent proposed this task. Audrey Tang helped me to get started. She also deserves a belated thank-you for her effort in finishing the previous edition, as does Yuval Kogman.

If you appreciate Perl, consider contributing to the Perl Foundation to help support the development of Perl.

Send complaints and comments about this summary to Ann Barcomb,

See also

Sunday July 09, 2006
04:43 PM

Perl 6 Summary: 2006-02-13 through 2006-02-28

Summary updates

Starting with this update, Ann Barcomb will be writing the Perl 6 summaries. Her plan is to release new issues on Sundays, initially dealing with the backlog at a rate of one month per week, and eventually returning to posting a summary of the previous week on a weekly basis.

The proposed schedule is:

  • July 9th: February (from 13th)
  • July 16th: March
  • July 23th: April
  • July 30th: May
  • August 6th: June
  • August 13th: July
  • August 20th: August (till 19th)
  • August 27th: Resume normal schedule

Compiler (perl6-compiler)

Making Pugs aware of Parrot

Peter Schwenn requested a concrete example settings to make Pugs aware of Parrot. Beau Cox replied with step-by-step instructions.

Difficulty installing Pugs on Cygwin

Syed Uzair Aqeel reported a Cygwin problem with finding package plugins when creating a makefile. Audrey made a suggestion.

Installation failure of Pugs revisions 9188 and 9204

Beau Cox reported that the 9188 revision of Pugs failed to pass smoke tests and install, and that the problem persisted with Pugs 9204 even after a reinstall of ghc and Haskell. Beau wrote a makefile patch, which also worked for chromatic, who had experienced the same problem.

Internals (parrot-porters)

Ed.: It turns out that the summaries in this section were mistakenly from 2003. This space will be filled with corrected summaries as they become available. Sorrie!

Language (perl6-language)

Typo Alert: Synopsis 5

Amos Robinson found a typo and Luke Palmer promptly corrected it.

Implementation of :w in regexes and other regex questions

David Romano asked some questions on extending the Rules domain specific language, the semantics of whitespace skipping, and negated matching semantics. Luke Palmer replied and explained that the extensions were not yet specified, and recommend possible solutions to the other two questions. Discussion ensued.

Overloading the variable declaration process

Darren Duncan wondered if he could get default values in variables instead of undef, in order to avoid calling the constructor, by simply annotating the type of the variable. Audrey Tang explained that a similar construct is available. This was followed by a discussion on the subject of class prototypes as default values for typed variables, as well as philosophical issues.

Instance attributes collision

Yiyi Hu asked what happens when different sigil attributes with the same name are declared in a single class. Various participants debated the merits of errors versus warnings.

CODE {...} mentioning variables without interpolation

Brad Bowman asked about the semantics of quasiquoting and variable interpolation for Perl 6's Macro language. Larry Wall explained the semantics of AST binding, the caller's scope, interpolating ASTs into the macro, and the COMPILING:: variable prefix. This was followed by a comment on Brad's signature about intelligence and good sense.

Selective String Interpolation

Brad Bowman wanted to know if string interpolation and escaping could be optimized for creating strings of Perl code that selectively interpolate. Ideally he would be able to declare which variables are interpolated. He also mentioned closure interpolation and how it does not work well when quoting strings of code. Many people provided ideas, covering Lisp and Ruby, backslashes, and custom quote operators.

Some newbie questions about Synopsis 5

H. Stelling asked about Rule capture numbering, aliasing semantics, and nested subpattern details. Patrick R. Michaud clarified and the capture numbering scheme was discussed.

Named Subroutine return values

Joe Gottman wanted to know if subroutine declarations without an explicit declaration type (my, our) can be annotated with a return value type. Damian Conway replied that the returns trait can used regardless of the declaration syntax. Luke Palmer and Larry Wall discussed the exact semantics of our Type sub foo, --> and returns style return type declarations.

S02: Reserved namespace ops

TSa asked what reservations the design team had about the various uses of the reserved syntax for type subscripting. Larry Wall reserved his right to silence, adding that he thought that is reserved means "we don't have the foggiest idea what we'll do with this, but we have a suspicion that if we let people use this particular thing right now, we'll regret it someday." The official status of the various items in the notes/ directory was clarified -- they are considered to be unofficial.

Synopsis 29 patch

Larry Wall posted a patch for Synopsis 29, recognizing it as official. Ruud H.G. van Tol followed up with questions about a round function, and pi/atan/atan2.

Synopsis 29 and Complex numbers

Jonathan Lang noted that Synopsis 29 deals with complex numbers when describing the sqrt function, but omitted others. He proceeded to list the functions which require special handling of complex numbers. Several people commented.


chromatic recruited me at YAPC::NA 2006, and Jesse Vincent proposed this task. Audrey Tang helped me to get started and reviewed this summary, and Yuval Kogman assisted with the Language section.

If you appreciate Perl, consider contributing to the Perl Foundation to help support the development of Perl.

Comments on the summary can be sent to

See also

Monday April 24, 2006
10:43 AM

Pugs: Licensing Clarification.

[ #29433 ]
(Two-sentence summary: I intend to relicense the Pugs internals code (i.e. the bin/pugs binary) to the MIT license, and only if fellow contributors are happy with that. Everything else under the Pugs tree is unaffected, and the the "compilation-right disclaimer" in README does not affect any code committed in Pugs in any way.)

I apologize that I've not conveyed the scope of licensing to our contributors properly, causing a lot of confusion.  While I have been saying "only the src/ tree will be affected" from the start, I did not clarify that the src/ here explicitly means the src/ directory in the Pugs repository, containing Haskell/C/Perl6 code that builds the main pugs executable -- i.e. it's Pugs's internals code.

I'm really, really sorry to cause people misparsing it as the "Pugs source tree".  All other subdirectories, such as t/, examples/, perl5/ ext/, doc/ and util/, remains exactly in the same licensing situation (Artistic 2.0b5/GPL) as they were.  Please see the README file for the full details, as well as my public apology to chromatic.

So, to reiterate again:

  • For Pugs contributors working on non-src/ directories, such as modules, tests, examples or documentations, nothing has changed in the licensing situation, and there is no plan at all to change them.
  • For Pugs contributors who have checked in src/, I would like to survey if you are okay with releasing your previous and future work under the MIT license.  If you are explicitly not okay, I'd like to know why.
  • Chromatic has requested that his work be pulled out from the src/ directory because he was unwilling to release it under SQLite's terms.  However, he later amended that he would be comfortable with the MIT license.
  • As my intention with src/ was merely allowing maximum reuse, I'm certainly happy to change to the MIT license's terms; I have reflected this change in the Pugs README.
  • The README does not change src/'s licensing currently; nothing will take effect until the next Pugs release, which will happen only after sufficient discussion time for src/ contributors to voice their opinions.

Aside from the src/ directory, I am uncomfortable with using Artistic license as whole-distribution compilation copyright license, because according to TPF, that may make it illegal to distribute Darren Duncan's module (GPL2+) along with Pugs, and I may have already been guilty for doing that for the past Pugs releases, just like Ruby people may be criminal for that with their regex.c (LGPL2+).

Because of this, I still wish to disclaim my compilation copyright, which basically means there is no global license that covers all of Pugs's subdirectory contents. This does not affect any contributed code in any way, and new commits in non-src/ trees are still under the Artistic2.0b5/GPL license by default, unless explicitly marked otherwise in that subdirectory or file.

Again, sorry for the confusion raised around this matter. I wish my English was more clear and succint...

(This is a repost from; please leave a comment there instead of on use.perl.)