Grant Proposal: Introduction to Application Development with Perl 6


The Grants Committee has received the following grant proposal for the May/June round. Before the Committee members vote, we would like to solicit feedback from the Perl community on the proposal.

Review the proposal below and please comment here by June 16th, 2018. The Committee members will start the voting process following that and the conclusion will be announced the last week of June.

Introduction to Application Development with Perl 6

  • Name:

    Patrick Spek

  • Amount Requested:

    USD $2,500


A book about getting started with application development in Perl 6. It will cover installation of Perl 6, the basics of the language, how to use the perl6 binary to run programs, how to create a terminal application and a GUI application using GTK::Simple.

Benefits to the Perl Community

The book, if approved, will be released in the public domain, which allows use for everyone interested. This can help new programmers to easily gain access to information to get started to use Perl 6 for real world applications. People who are already familiar with Perl 6 can freely distribute the contents of the book to other people to promote Perl 6.


A book titled "Introduction to Application Development with Perl 6", released under the Creative Commons license.

Project Details

The book will cover introduction to terminal application and GUI application development. Thus far, I have the following 20 chapters planned, with a short description of what they will contain:

  • Foreword: About the author, special thanks for contributors, what will this book teach you, what prior knowledge is required, a word about Unicode in Perl 6.
  • Getting ready to use Perl 6: Installing Perl 6 and setting up an editor
  • Hello world!: Run a minimal "Hello World" using perl6 -e, once written in a single file to be ran with perl6 and once in a generic Perl 6 module structure. Using App::Assixt for the last part.
  • An overview of Perl 6 constructs: Basic operators, conditional blocks, loops, differences between sigils.
  • The MAIN subroutine: What is the MAIN subroutine, and why should you use it?
  • Adding some plain old documentation: Using Perl 6 POD to document your code, along with common formatting constructs from Perl 6 POD.
  • Generating usage info with USAGE: Applying POD knowledge to MAIN and overriding the default USAGE to generate custom messages.
  • Accepting flags and options: How to make MAIN deal with command line flags and options.
  • Variable types: What are typed variables, why would you use them, some common types.
  • Splitting off into a module: Moving parts of your code into a separate module and using them.
  • Using modules: How to use modules, specifically third party modules.
  • Classes and objects: How to make classes and instantiate them.
  • Application configuration: How to deal with user configuration of your application? This will use the Config module.
  • Dealing with user input at run time: How to prompt the user for input and use it in your application.
  • Pretty output: How to format and color output of your application. This will use Terminal::ANSIColor.
  • Reading and writing files: How to read files and write files.
  • Making a GUI with GTK: Using GTK::Simple to create a GUI.
  • Handling GUI events: Continuing on GTK::Simple, how to handle events and change elements in the GUI based on these events.
  • Running as a service: How to run a Perl 6 application as a system service. This will target systemd, OpenRC and possibly BSD's RC as service managers.
  • Addendum
    • List of Unicode operators

The book itself will be written using LaTeX, though this can change if it is found to be unfeasable (lack of Unicode support, for instance). Whatever the source format will be, it must allow generation of many different formats for end users, such as PDF or EPUB. The sources will be publicly available on GitLab while the book is still being written. Once finalized, a PDF version of the book will be published on my personal site, sources will remain available on GitLab and everything will be released under CC-BY-SA, allowing free redistribution by anyone.

If the grant is accepted, I will also incorporate all the inch-stones of the project as issues on the GitLab repository, to make it easier for those watching to keep track of progression. If possible, I'd also like to request a grant manager with experience in writing technical books.

Additionally, I would like to have a handful of people willing to proofread the book. I will ask from my social circles first, but would like some "unknown" proofreaders with Perl 6 experience from the community as well. Each proofreader will be referred to in the book's foreword, with a link to their website if desired.


  • Acquire a cover image
  • Write the chapter "Foreword"
  • Write the chapter "Getting ready to use Perl 6"
    • Gather information on configuring Emacs
    • Gather information on configuring Atom
    • Gather information on CommaIDE
  • Write the chapter "Hello world!"
  • Write the chapter "An overview of Perl 6 constructs"
    • Contemplate which operators to cover
  • Write the chapter "The MAIN subroutine"
  • Write the chapter "Adding some plain old documentation"
    • Contemplate which POD elements to cover
  • Write the chapter "Generating usage info with USAGE"
  • Write the chapter "Accepting flags and options"
  • Write the chapter "Variable types"
    • Contemplate which types to cover
  • Write the chapter "Splitting off into a module"
  • Write the chapter "Using modules"
  • Write the chapter "Classes and objects"
  • Write the chapter "Application configuration"
  • Write the chapter "Dealing with user input at run time"
  • Write the chapter "Pretty output"
    • Gather information on how to use Terminal::ANSIColor
  • Write the chapter "Reading and writing files"
  • Write the chapter "Making a GUI with GTK"
    • Learn how to make menus with GTK::Simple
  • Write the chapter "Handling GUI events"
  • Write the chapter "Running as a service"
    • Learn about systemd unit files
    • Learn about OpenRC service files
    • Learn about BSD RC service files
  • Write addendum: List of Unicode operators
    • Research methods of Unicode input
    • Gather the Unicode operators relevant to the book
    • Create overview of the used Unicode operators and their input information

Project Schedule

I expect the total time required to be four months to finish the book. This includes researching certain topics (such as how to make use of some modules, how to configure editors) to ensure I can make it easy to understand for new programmers.

Completeness Criteria

The sources of the book, as available through GitLab, contain all the chapters described in the project details, and contains no TODO comments anymore.


I'm Patrick Spek, tyil on IRC, TYIL on CPAN. I've been interested in Perl 6 for a couple of years now, and have been using it for personal projects for a while. I've also written tutorials on Perl 6, which have been released on my personal website. I like writing about technical topics, and would like to expand from short tutorials on my blog to a larger article which can be published as a book. I've also heard from people at the local Perl Mongers that they'd like to see more Perl 6 books.

By writing a book on Perl 6, I can achieve both my personal goal of writing a book on a technical topic, and help out the Perl 6 community by providing them with more materials to support and promote Perl 6.


I like this proposal, and that the book will sufficiently differ from Learning Perl 6 and

Especially the chapters "Splitting off into a module", and "Making a GUI..."/"Handling GUI", and "Running as a service", cought my eye, as such things are of great value to help people make those types of programs, that would impress people with the value of Perl 6.

I concur with Wendy. The proposed book is just what I’m looking for to go with teaching a course in beginning programming in the fall!

This is a book scope that I would be interested in reading, and following along with / running the project code as it is explained and developed in the successive chapters.

Will the book show in detail both how the project utilises a code development platform (such as Github) to build the application, and how the code is organised, developed and managed utilising an IDE (specifically Comma)?

If not, then I wonder whether this project presents an opportunity for collaboration (perhaps with Edument, or some group of experienced developer folk) to build, alongside the book, an "extended Case Study" utilisation document for the Comma IDE.

If successful this collaboration could perhaps form the template for future "Case Study"-type documentation projects.

The grantee's GUI tutorial[^1] was very well received by the users, suggesting the book would have decently-written content. However, the shortness of the 4-month total time to finish the book that's listed on the grant concerns me a bit. Would this end up being a rushed book full of errors and poorly-written content?



Questions for tyil: what would make this book unique, compared to the other nine Perl 6 books ( )? Why should a person read this book, as opposed to reading a couple of already-available docs and tutorials for sub MAIN, GTK, and modules?

I have similar thoughts as Zoffix. tyil's previous writings are good, so I support the proposal, but four months is not a long time.

One suggestion for a topic that I don't think has been covered in a book already is profiling. Perl 6 has a built in profiler, but I have definitely run across people who didn't know that, or how to interpret the results when shown it.

> Will the book show in detail both how the project utilises a code development platform (such as Github) to build the application

Github, GitLab and others are currently not planned to take care of.

> and how the code is organised, developed and managed utilising an IDE (specifically Comma)?

I am interested in using CommaIDE as the editor of choice, since it's made specifically for Perl 6 development. However, I have no access to CommaIDE as of yet. It also won't be available for no price by the time I plan to have the book done. Maybe this can be discussed with the creators of the IDE to see if something can be arranged. I think using a good editor is important to have a usable book for people being introduced to the language.

If possible, I'd like to use CommaIDE, which is not mentioned in the other books as far as I'm aware. I also try to focus specifically on things that make Perl 6 easy to use for real-world application development, such as USAGE info generation using POD declarators.

A beginning user could always teach themselves everything they'd want by reading the online documentation, but a collection of information to get just get started with to write applications is generally more preferred by new programmers.

My intent is to make the user capable to start making actual applications that they can use in practice, specifically terminal-based applications, GUIs and daemons.

The time I estimated (and money required) is a pure shot in the dark, I've never tried to write a full book. I'm not intending to write a "rushed" book, which is why want to open up the sources to everyone to leave comments as I work on it. This allows people to bring in feedback immediately to avoid sloppy written content. I've also marked the resolution of TODOs as a completeness criteria to ensure this.

For the time period estimation, please refer to my answer to Zoffix.

On the profiling topic, I know of its existence, but I've never worked with it. I can ask some local Perl mongers to show me how to use and interpret it and add it to the book. I'm not sure if this fits the target audience.

This kind of book is really needed to spawn a whole new generation of perl6 developers.
As already mentioned, estimating the duration of completing a book is quite hard, but you can do a lot of stuff in 4 months. So I guess that's a +1 for the proposal.

I have updated the grant proposal. The new version can be found here: I have opted to change the time required for a couple reasons:

- I want to make use of Comma as the editor of choice. This would make an easy entry point for new programmers, as this is a full IDE geared specifically towards Perl 6. This means less trouble getting started. However, the community release of Comma is not until 2019. By extending the deadline, I can release the book after the community release.

- As pointed out in some comments, the time estimation may just have been very optimistic. I've spoken about this with some people on IRC as well. I've not written a book before, so I had no prior experience to help me make a good estimation.

- As pointed out in another comment, showing how to use Perl 6 projects with code sharing platforms such as Github could be benificial to include. Automated testing and building of applications is a common practice nowadays, so it would be nice if I could play in to that. Additionally, more people sharing more code could raise awareness about the language itself.

I do want to apologise for the inconvenience of updating the grant proposal, but I'd very much want this book to be useful to a large crowd of new Perl 6 programmers. I don't want to compromise on the quality of the book in any way, and saw this as the best option to take.

> I have updated the grant proposal

The URL in your comment is broken because the automatically generated link included the trailing period.

Here is the

=item Amount Requested:

USD 4,000

I believe that qualifies as a bona fide switcheroo.

Leave a comment

About TPF

The Perl Foundation - supporting the Perl community since 2000. Find out more at

About this Entry

This page contains a single entry by Coke published on June 11, 2018 3:10 PM.

Grant Proposal: App::rs - The first reference counting CPAN client was the previous entry in this blog.

The Perl Conference Newsletter: 6/11/18 is the next entry in this blog.

Find recent content on the main index or look in the archives to find all content.


OpenID accepted here Learn more about OpenID
Powered by Movable Type 6.2.2