<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.perl-guilds.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Admin</id>
	<title>Perl Guilds - Getting Medieval with Perl - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.perl-guilds.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Admin"/>
	<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=Special:Contributions/Admin"/>
	<updated>2026-07-31T23:50:10Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=Main_Page&amp;diff=387</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=Main_Page&amp;diff=387"/>
		<updated>2026-07-20T09:15:30Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Welcome to the Perl Guilds Wiki ===&lt;br /&gt;
The &#039;&#039;&#039;Perl Guilds&#039;&#039;&#039; wiki is a community-driven resource designed to support &#039;&#039;&#039;freelance and independent Perl programmers&#039;&#039;&#039; and help them thrive in their trades. The original wiki concept was inspired by [https://wiki.freepascal.org FreePascal]&#039;s community wiki.&lt;br /&gt;
&lt;br /&gt;
This wiki is maintained by [[ServiceProviders|&#039;&#039;&#039;these people&#039;&#039;&#039;]]. You may thank them for this resource by hiring them for something.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width:100%; border:2px solid #6b4e2e; background:#fffaf0; margin:1em 0; padding:0.4em;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width:100px; text-align:center; vertical-align:top; padding:0.7em;&amp;quot; | [[File:NewUserLogo.png|88px|link=Portal:Essays about The Virtuous Perl Programmer|alt=The Virtuous Perl Programmer essay series]]&lt;br /&gt;
| style=&amp;quot;vertical-align:top; padding:0.7em 1em;&amp;quot; |&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Featured Series: [[Portal:Essays about The Virtuous Perl Programmer|The Virtuous Perl Programmer]]&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This long-form essay series follows the Perl programmer as craftsman: from the potentially weary journeyman or master seeking renewed work, to the prospective apprentice who has not yet discovered the trade. Its current technical journey develops a complete Windows wxPerl workshop and follows the work from a Perl idea to a graphical application, executable, installer, and supportable product.&lt;br /&gt;
&lt;br /&gt;
The essays apply &#039;&#039;&#039;Prudence&#039;&#039;&#039;, &#039;&#039;&#039;Spiritedness&#039;&#039;&#039;, and &#039;&#039;&#039;Good Order&#039;&#039;&#039; to real technical decisions without separating craftsmanship from truth, justice, the dignity of workers, service to users, or the proper use of talents received from God.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Begin the journey:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# [[The Perl Craftsman Returns to the Windows Desktop]]&lt;br /&gt;
# [[The Perl Lazarus Workshop]]&lt;br /&gt;
# [[Raising a Working wxPerl Shop on Windows]]&lt;br /&gt;
# &#039;&#039;Forthcoming:&#039;&#039; [[From wxGlade Layout to Working Perl Application]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Series portal:&#039;&#039;&#039; [[Portal:Essays about The Virtuous Perl Programmer|Essays about The Virtuous Perl Programmer]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Living technical reference:&#039;&#039;&#039; [[Developing and Distributing wxPerl Applications on Windows]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Related project:&#039;&#039;&#039; [[:Category:Perl Lazarus Project|Perl Lazarus Project]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Transforming Perl by Striving for Virtue ===&lt;br /&gt;
The infamous three &amp;quot;virtues&amp;quot; of a Perl programmer are not what you have been led to believe. They are bad, very bad. Please [https://www.youtube.com/watch?v=mEWfo9U3uTM view this] to learn more about [[The Real 3 Virtues of Perl|&#039;&#039;&#039;the true virtues of Perl&#039;&#039;&#039;]]: &#039;&#039;&#039;&#039;&#039;Prudence&#039;&#039;&#039;&#039;&#039;, &#039;&#039;&#039;&#039;&#039;Spiritedness&#039;&#039;&#039;&#039;&#039;, and &#039;&#039;&#039;&#039;&#039;Good Order&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
God is the Creator and the source of every good gift and talent. The programmer does not create from nothing; he receives intelligence, opportunity, tools, knowledge, and the labor of earlier craftsmen, and is responsible for developing these gifts and ordering them toward truthful service.&lt;br /&gt;
&lt;br /&gt;
Mastery therefore carries obligations. The apprentice, journeyman, master, customer, and user possess the same God-given dignity, while greater skill creates greater duties of justice, humility, patience, stewardship, and care.&lt;br /&gt;
&lt;br /&gt;
The [[Portal:Essays about The Virtuous Perl Programmer|Virtuous Perl Programmer essays]] apply these principles to the daily work of programming: choosing tools, forming apprentices, using AI, respecting licenses, protecting users, earning a just livelihood, and bringing software to completion.&lt;br /&gt;
&lt;br /&gt;
I hope to convey these ideals through this resource, and I hope you can help me.&lt;br /&gt;
&lt;br /&gt;
=== Site Feedback and Contributions ===&lt;br /&gt;
Click [https://github.com/The-Perl-Cottage-Guild/wiki-requests/issues here] to report an issue with the content, suggest edits or additions, or request editor access.&lt;br /&gt;
&lt;br /&gt;
You may also [https://sourceforge.net/projects/perl-guilds/lists/perl-guilds-editors &#039;&#039;&#039;join the editors email list&#039;&#039;&#039;] to provide feedback, volunteer, or discuss proposed changes. &amp;lt;u&amp;gt;&#039;&#039;&#039;&#039;&#039;[https://sourceforge.net/projects/perl-guilds/lists/perl-guilds-editors This may get you a quicker response].&#039;&#039;&#039;&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Volunteers are eligible to create a listing [[ServiceProviders|here]].&lt;br /&gt;
&lt;br /&gt;
= Portals =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left; width:49%;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
== General Audience Links ==&lt;br /&gt;
&lt;br /&gt;
Wiki portals have been created for a selection of the platforms and topics that Perl and related tools support. The portals gather related information for each platform or topic in one place to make it easier to locate. The full list of supported platforms may be found [[Platform_list|here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:NewUserLogo.png|link=Portal:Essays about The Virtuous Perl Programmer|[[Portal:Essays about The Virtuous Perl Programmer|Virtuous Perl Programmer]]&lt;br /&gt;
File:wxPerl.png|link=Portal:GUIs with Perl|[[Portal:GUIs with Perl|GUIs with Perl]]&lt;br /&gt;
File:Logo Windows 01.png|link=Portal:Windows|[[Portal:Windows|Windows]]&lt;br /&gt;
File:Payment.jpeg|link=Portal:Payment Processing|[[Portal:Payment Processing|Getting Paid]]&lt;br /&gt;
File:Money.jpeg|link=Portal:Perl for Profit|[[Portal:Perl for Profit|Perl for Profit]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:Perlopenmp.jpeg|link=Portal:Perl+OpenMP|[[Portal:Perl+OpenMP|Perl+OpenMP]]&lt;br /&gt;
File:Concurrency.png|link=Portal:Concurrency|[[Portal:Concurrency|Concurrency]]&lt;br /&gt;
File:ToolBox.png|link=Portal:Software Development Tools|[[Portal:Software Development Tools|Development Tools]]&lt;br /&gt;
File:perlCGI.jpg|link=Portal:Perl CGI Programming|[[Portal:Perl CGI Programming|Legacy Perl]]&lt;br /&gt;
File:Camels.jpg|link=Portal:Perl Powered Programs (PPP)|[[Portal:Perl Powered Programs (PPP)|Perl Powered Programs (PPP)]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:Perlcommunity.png|link=Portal:Perl Communities|[[Portal:Perl Communities|Communities]]&lt;br /&gt;
File:XS.jpg|link=Portal:Embedding and Extending Perl|[[Portal:Embedding and Extending Perl|Embedding and Extending Perl]]&lt;br /&gt;
File:History.gif|link=Portal:Perl History|[[Portal:Perl History|Perl History]]&lt;br /&gt;
File:SQLdb TSQLQuery.PNG|link=Portal:Databases|[[Portal:Databases|Database Development]]&lt;br /&gt;
File:GamesPortalLogo.png|link=Portal:Game Development|[[Portal:Game Development|Game Development]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:HowTo.png|link=Portal:HowTo Demos|[[Portal:HowTo Demos|HowTo Demos]]&lt;br /&gt;
File:Rperl.jpeg|link=Portal:Alt. Perls|[[Portal:Alt. Perls|Alt. Perls]]&lt;br /&gt;
File:Ai.jpeg|link=Portal:Artificial Intelligence|[[Portal:Artificial Intelligence|Artificial Intelligence]]&lt;br /&gt;
File:Crypto.png|link=Portal:Crypto and Blockchain|[[Portal:Crypto and Blockchain|Blockchain]]&lt;br /&gt;
File:Perlbooks.jpg|link=Portal:Ex Libris|[[Portal:Ex Libris|Ex Libris]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:Embedded.png|link=Portal:Embedded|[[Portal:Embedded|Embedded]]&lt;br /&gt;
File:FBSD Daemon.jpg|link=Portal:FreeBSD,OpenBSD,etc|[[Portal:FreeBSD,OpenBSD,etc|FreeBSD, OpenBSD, etc.]]&lt;br /&gt;
File:tux.png|link=Portal:Linux|[[Portal:Linux|Linux]]&lt;br /&gt;
File:macOSlogo.png|link=Portal:Mac|[[Portal:Mac|macOS]]&lt;br /&gt;
File:HardwarePortalLogo.png|link=Portal:Hardware and Robotics|[[Portal:Hardware and Robotics|Hardware and Robotics]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:Businessmodels.jpeg|link=Portal:Perl Business Models and Case Studies|[[Portal:Perl Business Models and Case Studies|Business Models and Case Studies]]&lt;br /&gt;
File:ImageMagick.gif|link=Portal:Graphics Programming|[[Portal:Graphics Programming|Graphics Programming]]&lt;br /&gt;
File:Hpc.jpg|link=Portal:HPC - High Performance Computing|[[Portal:HPC - High Performance Computing|HPC - High Performance Computing]]&lt;br /&gt;
File:Bioperl.jpeg|link=Portal:Life Sciences|[[Portal:Life Sciences|Life Sciences]]&lt;br /&gt;
File:tdrawgrid.png|link=Portal:SaaS and Web Development|[[Portal:SaaS and Web Development|SaaS and Web Development]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:tachart getting started step6.png|link=Portal:SciTech|[[Portal:SciTech|Science and Technology]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:right; width:49%;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
== Perl Craftsmen and Professional Development ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This section is for independent software professionals who charge money for Perl-related services, and for those preparing to do so.&#039;&#039;&#039; Perl may be the visible product, the server-side foundation, or the craftsman&#039;s secret weapon.&lt;br /&gt;
&lt;br /&gt;
This is not a celebration of being a careless &amp;quot;jack of all trades.&amp;quot; It is a place for apprentices, journeymen, and masters who wish to cultivate real specialties, serve users well, support their families, and earn a just and sustainable livelihood through useful labor.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Featured Technical Journey&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Portal:Essays about The Virtuous Perl Programmer|The Virtuous Perl Programmer]]&lt;br /&gt;
  ** [[The Perl Craftsman Returns to the Windows Desktop]]&lt;br /&gt;
  ** [[The Perl Lazarus Workshop]]&lt;br /&gt;
  ** [[Raising a Working wxPerl Shop on Windows]]&lt;br /&gt;
  ** &#039;&#039;Forthcoming:&#039;&#039; [[From wxGlade Layout to Working Perl Application]]&lt;br /&gt;
* [[Developing and Distributing wxPerl Applications on Windows|Complete wxPerl-on-Windows technical reference]]&lt;br /&gt;
* [[:Category:Perl Lazarus Project|Perl Lazarus Project category]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Quick Links&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[ServiceProviders|Perl service providers and craftsmen]]&lt;br /&gt;
* [[Portal:Perl for Profit|Perl for Profit]]&lt;br /&gt;
* [[Portal:Payment Processing|Getting Paid]]&lt;br /&gt;
* [[Portal:Perl Business Models and Case Studies|Perl Business Models and Case Studies]]&lt;br /&gt;
* [[Portal:Software Development Tools|Software Development Tools]]&lt;br /&gt;
* [[Portal:HowTo Demos|HowTo Demos]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notable Updates&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Portal:GUIs with Perl|GUIs with Perl]]&lt;br /&gt;
  ** [[Developing and Distributing wxPerl Applications on Windows]]&lt;br /&gt;
  ** [https://github.com/The-Perl-Cottage-Guild/wxPerl-wxGlade-Templates wxPerl-wxGlade Templates]&lt;br /&gt;
* [[Portal:Perl+OpenMP|Perl+OpenMP]]&lt;br /&gt;
* [[Portal:Artificial Intelligence|Artificial Intelligence]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Email Lists&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[https://sourceforge.net/projects/perl-guilds/lists/perl-guilds-editors Perl-Guilds Wiki Contributors]&#039;&#039;&#039; listserv — join if you would like to contribute or offer regular feedback&lt;br /&gt;
* &#039;&#039;&#039;[https://sourceforge.net/projects/perl-openmp/lists/perl-openmp-discuss Perl+OpenMP]&#039;&#039;&#039; listserv&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: Yes, I encourage email lists for your project; and it turns out SourceForge.net is a great place to host reliable email lists!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;RAD, Rapid Application Development Tools, IDEs, and Installer-Makers&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [https://strawberryperl.com/ Strawberry Perl] — native Perl and build environment for Windows&lt;br /&gt;
* [https://sourceforge.net/projects/wxglade/ wxGlade] — written in Python, but can output Perl&lt;br /&gt;
* [https://www.msys2.org/ MSYS2] — Unix-like editing, Git, SSH, and shell environment for Windows&lt;br /&gt;
* [https://jrsoftware.org/isinfo.php Inno Setup] — professional Windows installer builder with reasonable commercial licensing terms&lt;br /&gt;
* [[Perl and wxWidgets RAD on Windows|History of Perl and wxWidgets RAD tools on Windows]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Using Perl for Making Windows GUI Programs&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Cross-platform GUIs with wxPerl&lt;br /&gt;
  ** [[Developing and Distributing wxPerl Applications on Windows]]&lt;br /&gt;
  ** [[GUI ideas for use with wxGlade]]&lt;br /&gt;
* Windows-specific GUIs with Win32::GUI&lt;br /&gt;
* Cross-platform GUIs with GUIDeFATE&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Using Perl for Creating Commercial SaaS and Other Services&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Portal:SaaS and Web Development|SaaS and Web Development]]&lt;br /&gt;
* [https://perlclientdirectory.com/ Perl Client Directory]&lt;br /&gt;
* Desktop wxPerl clients may complement Perl web applications, APIs, databases, and hosted processing services.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Monetization Strategies for Perl Programmers&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Portal:Perl for Profit|Perl for Profit]]&lt;br /&gt;
* [[Portal:Payment Processing|Payment Processing]]&lt;br /&gt;
* [[Portal:Perl Business Models and Case Studies|Business Models and Case Studies]]&lt;br /&gt;
* Application sales, site licenses, paid customization, migration, support, maintenance, training, hosting, and consulting&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Commercial Success Stories and Case Studies&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Portal:Perl Business Models and Case Studies]]&lt;br /&gt;
* [[Projects using Perl]]&lt;br /&gt;
* [[Portal:Perl Powered Programs (PPP)|Perl Powered Programs]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Downloads and Source Code&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/The-Perl-Cottage-Guild The Perl Cottage Guild on GitHub]&lt;br /&gt;
* [https://github.com/The-Perl-Cottage-Guild/wxPerl-wxGlade-Templates wxPerl-wxGlade Templates]&lt;br /&gt;
* [https://github.com/StormSurgeLive/nhc-advisory-gui NHC Advisory Explorer]&lt;br /&gt;
* [[:Category:Code|Code on this wiki]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Community Participation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [https://www.perl-guilds.net Perl Guilds Forum] — test forum to see if any activity is drawn to it&lt;br /&gt;
* [https://github.com/The-Perl-Cottage-Guild/wiki-requests/issues Wiki requests and issue tracker]&lt;br /&gt;
* [[ServiceProviders|Service-provider listings]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tutorials&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Portal:HowTo Demos|HowTo Demos]]&lt;br /&gt;
* [[Developing and Distributing wxPerl Applications on Windows]]&lt;br /&gt;
* [[Raising a Working wxPerl Shop on Windows]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Books, Magazines, and Long-Form Writing&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Portal:Ex Libris|Ex Libris]]&lt;br /&gt;
* [[Portal:Essays about The Virtuous Perl Programmer|The Virtuous Perl Programmer essays]]&lt;br /&gt;
* The essay series is being developed incrementally as a future book-length treatment of virtuous craftsmanship and marketable wxPerl application development.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Related Sites&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* https://perlclientdirectory.com/ — curated list of Perl clients for external APIs and services&lt;br /&gt;
* https://perlmodules.net — track changes to your favorite Perl modules in CPAN&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== In the News ==&lt;br /&gt;
&lt;br /&gt;
A summary of recent news stories about Perl can be found [[In the News|here]].&lt;br /&gt;
&lt;br /&gt;
== Projects using Perl ==&lt;br /&gt;
&lt;br /&gt;
Details and screenshots of an extensive number of applications created with Perl may be found [[Projects using Perl|here]]. There is also plenty of source code that can be found [[:Category:Code|here]].&lt;br /&gt;
&lt;br /&gt;
== Bug Tracker ==&lt;br /&gt;
&lt;br /&gt;
The [https://github.com/Perl/perl5/issues Perl Bug Tracker] and the [https://rt.perl.org/ Perl Request Tracker] (RT) are the places to go to check if the anomaly you have encountered has already been recorded as a Perl or Perl module bug. If not, you can lodge a bug report; see [[How do I create a bug report]] so that it can be fixed. Even better, lodge a patch if you can; see [[Creating A Patch]].&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=Category:Git&amp;diff=386</id>
		<title>Category:Git</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=Category:Git&amp;diff=386"/>
		<updated>2026-07-20T07:06:57Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;{{DISPLAYTITLE:Category:Git}}  This category contains pages concerning the use of &amp;#039;&amp;#039;&amp;#039;Git&amp;#039;&amp;#039;&amp;#039; in Perl projects.  Within the wxPerl and wxGlade workflow, Git preserves generated and handwritten source, exposes changes made during code generation, provides recoverable checkpoints, and allows the craftsman to distinguish verified work from experimentation.  &amp;#039;&amp;#039;&amp;#039;Related workflow:&amp;#039;&amp;#039;&amp;#039; Developing and Distributing wxPerl Applications on Windows  Git C...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Category:Git}}&lt;br /&gt;
&lt;br /&gt;
This category contains pages concerning the use of &#039;&#039;&#039;Git&#039;&#039;&#039; in Perl projects.&lt;br /&gt;
&lt;br /&gt;
Within the wxPerl and wxGlade workflow, Git preserves generated and handwritten source, exposes changes made during code generation, provides recoverable checkpoints, and allows the craftsman to distinguish verified work from experimentation.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Related workflow:&#039;&#039;&#039; [[Developing and Distributing wxPerl Applications on Windows]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Perl Guilds|Git]]&lt;br /&gt;
[[Category:Perl Lazarus Project|Git]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=Category:MSYS2&amp;diff=385</id>
		<title>Category:MSYS2</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=Category:MSYS2&amp;diff=385"/>
		<updated>2026-07-20T07:06:39Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;{{DISPLAYTITLE:Category:MSYS2}}  This category contains pages discussing the use of &amp;#039;&amp;#039;&amp;#039;MSYS2&amp;#039;&amp;#039;&amp;#039; as a Unix-like editing, Git, SSH, and shell environment for Perl development on Windows.  Within the Perl Lazarus workflow, MSYS2 complements rather than replaces Strawberry Perl. It may be used for vim, Git, source inspection, and familiar shell utilities, while wxPerl applications and packaging commands are run using the intended Strawberry Perl environment.  &amp;#039;&amp;#039;&amp;#039;Related work...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Category:MSYS2}}&lt;br /&gt;
&lt;br /&gt;
This category contains pages discussing the use of &#039;&#039;&#039;MSYS2&#039;&#039;&#039; as a Unix-like editing, Git, SSH, and shell environment for Perl development on Windows.&lt;br /&gt;
&lt;br /&gt;
Within the Perl Lazarus workflow, MSYS2 complements rather than replaces Strawberry Perl. It may be used for vim, Git, source inspection, and familiar shell utilities, while wxPerl applications and packaging commands are run using the intended Strawberry Perl environment.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Related workflow:&#039;&#039;&#039; [[Developing and Distributing wxPerl Applications on Windows]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Windows|MSYS2]]&lt;br /&gt;
[[Category:Perl Lazarus Project|MSYS2]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=Category:WxGlade&amp;diff=384</id>
		<title>Category:WxGlade</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=Category:WxGlade&amp;diff=384"/>
		<updated>2026-07-20T07:06:25Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;{{DISPLAYTITLE:Category:wxGlade}}  This category contains pages about &amp;#039;&amp;#039;&amp;#039;wxGlade&amp;#039;&amp;#039;&amp;#039;, a visual interface designer for wxWidgets applications.  Within the Perl Lazarus workflow, wxGlade is used to save graphical interface projects as XML and emit Perl source code for wxPerl applications. Pages may cover installation, output settings, generated-code preservation, templates, interface ideas, event wiring, and efficient edit–emit–run workflows.  &amp;#039;&amp;#039;&amp;#039;GUI ideas and examples:...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Category:wxGlade}}&lt;br /&gt;
&lt;br /&gt;
This category contains pages about &#039;&#039;&#039;wxGlade&#039;&#039;&#039;, a visual interface designer for wxWidgets applications.&lt;br /&gt;
&lt;br /&gt;
Within the Perl Lazarus workflow, wxGlade is used to save graphical interface projects as XML and emit Perl source code for wxPerl applications. Pages may cover installation, output settings, generated-code preservation, templates, interface ideas, event wiring, and efficient edit–emit–run workflows.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GUI ideas and examples:&#039;&#039;&#039; [[GUI ideas for use with wxGlade]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Windows wxPerl workflow:&#039;&#039;&#039; [[Developing and Distributing wxPerl Applications on Windows]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Template repository:&#039;&#039;&#039; [https://github.com/The-Perl-Cottage-Guild/wxPerl-wxGlade-Templates wxPerl-wxGlade Templates]&lt;br /&gt;
&lt;br /&gt;
[[Category:Perl Lazarus Project|wxGlade]]&lt;br /&gt;
[[Category:wxPerl|wxGlade]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=Category:Strawberry_Perl&amp;diff=383</id>
		<title>Category:Strawberry Perl</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=Category:Strawberry_Perl&amp;diff=383"/>
		<updated>2026-07-20T07:06:07Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;{{DISPLAYTITLE:Category:Strawberry Perl}}  This category contains pages about &amp;#039;&amp;#039;&amp;#039;Strawberry Perl&amp;#039;&amp;#039;&amp;#039;, the native Perl distribution for Windows used as the principal Perl and build environment in the Perl Lazarus Project.  Topics may include installation profiles, compilers, build tools, module installation, PDL distributions, environment verification, and compatibility with wxPerl and native libraries.  &amp;#039;&amp;#039;&amp;#039;Primary wxPerl installation guide:&amp;#039;&amp;#039;&amp;#039; Developing and Distributin...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Category:Strawberry Perl}}&lt;br /&gt;
&lt;br /&gt;
This category contains pages about &#039;&#039;&#039;Strawberry Perl&#039;&#039;&#039;, the native Perl distribution for Windows used as the principal Perl and build environment in the Perl Lazarus Project.&lt;br /&gt;
&lt;br /&gt;
Topics may include installation profiles, compilers, build tools, module installation, PDL distributions, environment verification, and compatibility with wxPerl and native libraries.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Primary wxPerl installation guide:&#039;&#039;&#039; [[Developing and Distributing wxPerl Applications on Windows]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Windows|Strawberry Perl]]&lt;br /&gt;
[[Category:Perl Lazarus Project|Strawberry Perl]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=Category:Windows&amp;diff=382</id>
		<title>Category:Windows</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=Category:Windows&amp;diff=382"/>
		<updated>2026-07-20T07:05:14Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;{{DISPLAYTITLE:Category:Windows}}  This category contains pages concerning Perl development, deployment, compatibility, and application distribution on Microsoft Windows.  Relevant topics include Strawberry Perl, wxPerl, GUI development, Windows executables, installers, native DLLs, backward compatibility, and historical experiments with older Windows systems.  &amp;#039;&amp;#039;&amp;#039;Primary wxPerl guide:&amp;#039;&amp;#039;&amp;#039; Developing and Distributing wxPerl Applications on Windows  Category:Perl Laz...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Category:Windows}}&lt;br /&gt;
&lt;br /&gt;
This category contains pages concerning Perl development, deployment, compatibility, and application distribution on Microsoft Windows.&lt;br /&gt;
&lt;br /&gt;
Relevant topics include Strawberry Perl, wxPerl, GUI development, Windows executables, installers, native DLLs, backward compatibility, and historical experiments with older Windows systems.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Primary wxPerl guide:&#039;&#039;&#039; [[Developing and Distributing wxPerl Applications on Windows]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Perl Lazarus Project|Windows]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=Category:WxPerl&amp;diff=381</id>
		<title>Category:WxPerl</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=Category:WxPerl&amp;diff=381"/>
		<updated>2026-07-20T07:04:58Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;{{DISPLAYTITLE:Category:wxPerl}}  This category contains pages about &amp;#039;&amp;#039;&amp;#039;wxPerl&amp;#039;&amp;#039;&amp;#039;, the Perl bindings for the wxWidgets graphical application framework.  Topics may include installation, controls, events, examples, wxGlade integration, Windows development, executable packaging, historical tools, and the creation of distributable desktop applications.  &amp;#039;&amp;#039;&amp;#039;Primary Windows guide:&amp;#039;&amp;#039;&amp;#039; Developing and Distributing wxPerl Applications on Windows  &amp;#039;&amp;#039;&amp;#039;Related history:&amp;#039;&amp;#039;&amp;#039; Perl...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Category:wxPerl}}&lt;br /&gt;
&lt;br /&gt;
This category contains pages about &#039;&#039;&#039;wxPerl&#039;&#039;&#039;, the Perl bindings for the wxWidgets graphical application framework.&lt;br /&gt;
&lt;br /&gt;
Topics may include installation, controls, events, examples, wxGlade integration, Windows development, executable packaging, historical tools, and the creation of distributable desktop applications.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Primary Windows guide:&#039;&#039;&#039; [[Developing and Distributing wxPerl Applications on Windows]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Related history:&#039;&#039;&#039; [[Perl and wxWidgets RAD on Windows]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Perl Lazarus Project|wxPerl]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=Category:Perl_Guilds&amp;diff=380</id>
		<title>Category:Perl Guilds</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=Category:Perl_Guilds&amp;diff=380"/>
		<updated>2026-07-20T07:04:44Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;{{DISPLAYTITLE:Category:Perl Guilds}}  This category contains pages related to &amp;#039;&amp;#039;&amp;#039;Perl Guilds&amp;#039;&amp;#039;&amp;#039;: its purposes, essays, projects, guilds, and efforts to support independent Perl programmers in the practice of their trade.  Perl Guilds draws upon the traditional idea of craftsmen learning, traveling, mastering a trade, forming apprentices, preserving knowledge, and supporting one another through useful work.  Its purpose is not to impose a compulsory professional organiza...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Category:Perl Guilds}}&lt;br /&gt;
&lt;br /&gt;
This category contains pages related to &#039;&#039;&#039;Perl Guilds&#039;&#039;&#039;: its purposes, essays, projects, guilds, and efforts to support independent Perl programmers in the practice of their trade.&lt;br /&gt;
&lt;br /&gt;
Perl Guilds draws upon the traditional idea of craftsmen learning, traveling, mastering a trade, forming apprentices, preserving knowledge, and supporting one another through useful work.&lt;br /&gt;
&lt;br /&gt;
Its purpose is not to impose a compulsory professional organization or restrict entry into programming. It seeks to encourage voluntary associations through which Perl programmers can:&lt;br /&gt;
&lt;br /&gt;
* preserve and share practical knowledge;&lt;br /&gt;
* develop marketable specialties;&lt;br /&gt;
* form and encourage new programmers;&lt;br /&gt;
* cooperate on projects;&lt;br /&gt;
* serve users and communities;&lt;br /&gt;
* and earn a just and sustainable livelihood through their labor.&lt;br /&gt;
&lt;br /&gt;
The Perl Lazarus Project and &#039;&#039;The Virtuous Perl Programmer&#039;&#039; essays are two expressions of this larger work.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Main page:&#039;&#039;&#039; [[Main Page|Perl Guilds]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Virtuous Programmer essays:&#039;&#039;&#039; [[Portal:Essays about The Virtuous Perl Programmer]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Perl Lazarus material:&#039;&#039;&#039; [[Category:Perl Lazarus Project]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=Category:Perl_Lazarus_Project&amp;diff=379</id>
		<title>Category:Perl Lazarus Project</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=Category:Perl_Lazarus_Project&amp;diff=379"/>
		<updated>2026-07-20T07:04:28Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;{{DISPLAYTITLE:Category:Perl Lazarus Project}}  The &amp;#039;&amp;#039;&amp;#039;Perl Lazarus Project&amp;#039;&amp;#039;&amp;#039; is an effort arising from Perl Guilds to make practical Windows GUI development, packaging, and distribution available to Perl programmers through a clear and repeatable workflow.  The project joins existing tools rather than attempting to replace them with a single monolithic development environment. Its principal stack includes:  * Strawberry Perl; * wxWidgets and wxPerl; * wxGlade; * MSYS2,...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Category:Perl Lazarus Project}}&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;Perl Lazarus Project&#039;&#039;&#039; is an effort arising from Perl Guilds to make practical Windows GUI development, packaging, and distribution available to Perl programmers through a clear and repeatable workflow.&lt;br /&gt;
&lt;br /&gt;
The project joins existing tools rather than attempting to replace them with a single monolithic development environment. Its principal stack includes:&lt;br /&gt;
&lt;br /&gt;
* Strawberry Perl;&lt;br /&gt;
* wxWidgets and wxPerl;&lt;br /&gt;
* wxGlade;&lt;br /&gt;
* MSYS2, vim, and Git;&lt;br /&gt;
* PAR-based executable packaging;&lt;br /&gt;
* DLL-discovery tools;&lt;br /&gt;
* and Inno Setup.&lt;br /&gt;
&lt;br /&gt;
The goal is to help a Perl programmer begin with existing Perl knowledge and end with a Windows application which an ordinary user can install, launch, and use without first reproducing the developer&#039;s environment.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Primary technical guide:&#039;&#039;&#039; [[Developing and Distributing wxPerl Applications on Windows]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Essay series:&#039;&#039;&#039; [[Portal:Essays about The Virtuous Perl Programmer|Essays about The Virtuous Perl Programmer]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Historical background:&#039;&#039;&#039; [[Perl and wxWidgets RAD on Windows]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Perl Guilds|Lazarus Project]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=Category:The_Virtuous_Perl_Programmer&amp;diff=378</id>
		<title>Category:The Virtuous Perl Programmer</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=Category:The_Virtuous_Perl_Programmer&amp;diff=378"/>
		<updated>2026-07-20T07:04:07Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;{{DISPLAYTITLE:Category:The Virtuous Perl Programmer}}  This category contains essays in &amp;#039;&amp;#039;&amp;#039;The Virtuous Perl Programmer&amp;#039;&amp;#039;&amp;#039; series.  The series considers programming as a human craft ordered toward truth, useful service, just exchange, and the common good. It applies the virtues developed through Perl Guilds to the practical work of designing, building, testing, distributing, selling, and supporting software.  The current technical journey follows the Perl craftsman from...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Category:The Virtuous Perl Programmer}}&lt;br /&gt;
&lt;br /&gt;
This category contains essays in &#039;&#039;&#039;The Virtuous Perl Programmer&#039;&#039;&#039; series.&lt;br /&gt;
&lt;br /&gt;
The series considers programming as a human craft ordered toward truth, useful service, just exchange, and the common good. It applies the virtues developed through Perl Guilds to the practical work of designing, building, testing, distributing, selling, and supporting software.&lt;br /&gt;
&lt;br /&gt;
The current technical journey follows the Perl craftsman from an existing knowledge of Perl toward the production of complete Windows desktop applications using Strawberry Perl, wxPerl, wxGlade, packaging tools, and Inno Setup.&lt;br /&gt;
&lt;br /&gt;
The essays are intended to serve both experienced Perl journeymen and masters who may be seeking a renewed field for their craft, and prospective apprentices who are only beginning to discover programming.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Main portal:&#039;&#039;&#039; [[Portal:Essays about The Virtuous Perl Programmer|Essays about The Virtuous Perl Programmer]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Related project:&#039;&#039;&#039; [[Category:Perl Lazarus Project|Perl Lazarus Project]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Perl Guilds|Virtuous Perl Programmer]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=Raising_a_Working_wxPerl_Shop_on_Windows&amp;diff=376</id>
		<title>Raising a Working wxPerl Shop on Windows</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=Raising_a_Working_wxPerl_Shop_on_Windows&amp;diff=376"/>
		<updated>2026-07-20T04:45:18Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Raising a Working wxPerl Shop on Windows}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This is the third essay in the series [[Portal:Essays about The Virtuous Perl Programmer|Essays about The Virtuous Perl Programmer]]. It follows [[The Perl Lazarus Workshop]] and moves from explaining the selected tools to assembling and using them.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A collection of tools is not yet a workshop.&lt;br /&gt;
&lt;br /&gt;
The craftsman must know where each tool belongs, how to verify that it works, and how to move from one stage of the work to the next without losing what he has already made.&lt;br /&gt;
&lt;br /&gt;
This essay will raise a practical wxPerl shop on Windows. By the end, the programmer should possess:&lt;br /&gt;
&lt;br /&gt;
* a known Strawberry Perl environment;&lt;br /&gt;
* a working installation of &amp;lt;code&amp;gt;Alien::wxWidgets&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Wx&amp;lt;/code&amp;gt;;&lt;br /&gt;
* a visible wxPerl demonstration;&lt;br /&gt;
* wxGlade configured to emit Perl;&lt;br /&gt;
* an MSYS2 terminal with vim and Git;&lt;br /&gt;
* a small wxGlade project;&lt;br /&gt;
* generated Perl source;&lt;br /&gt;
* at least one working event;&lt;br /&gt;
* and a Git commit preserving the first successful state of the shop.&lt;br /&gt;
&lt;br /&gt;
This is not yet the construction of a commercial application. It is the preparation of the place in which such an application can be built.&lt;br /&gt;
&lt;br /&gt;
The distinction matters.&lt;br /&gt;
&lt;br /&gt;
A programmer who begins a major project before verifying the workshop may later be unable to tell whether a failure belongs to the application, the GUI design, the active Perl, the native library, the generated code, or the operating environment.&lt;br /&gt;
&lt;br /&gt;
The prudent craftsman proves each layer before placing the next one upon it.&lt;br /&gt;
&lt;br /&gt;
== What counts as a working shop? ==&lt;br /&gt;
&lt;br /&gt;
The shop is working when the entire development cycle can be repeated:&lt;br /&gt;
&lt;br /&gt;
# Open or create a wxGlade project.&lt;br /&gt;
# Change the graphical design.&lt;br /&gt;
# Emit Perl source code.&lt;br /&gt;
# Inspect the generated changes.&lt;br /&gt;
# Add or revise application behavior.&lt;br /&gt;
# Run the application with the intended Strawberry Perl.&lt;br /&gt;
# Correct the work.&lt;br /&gt;
# Preserve a known-good state in Git.&lt;br /&gt;
&lt;br /&gt;
The goal is not merely to install several programs without error messages.&lt;br /&gt;
&lt;br /&gt;
The goal is to establish a rhythm of work.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ The daily wxPerl working cycle&lt;br /&gt;
! Stage&lt;br /&gt;
! Primary tool&lt;br /&gt;
! Result&lt;br /&gt;
|-&lt;br /&gt;
| Design&lt;br /&gt;
| wxGlade&lt;br /&gt;
| A saved &amp;lt;code&amp;gt;.wxg&amp;lt;/code&amp;gt; XML project&lt;br /&gt;
|-&lt;br /&gt;
| Emit&lt;br /&gt;
| wxGlade&lt;br /&gt;
| Perl source generated from the visual design&lt;br /&gt;
|-&lt;br /&gt;
| Inspect and edit&lt;br /&gt;
| vim under MSYS2&lt;br /&gt;
| Reviewed source and handwritten behavior&lt;br /&gt;
|-&lt;br /&gt;
| Run&lt;br /&gt;
| Strawberry Perl terminal&lt;br /&gt;
| The actual wxPerl application&lt;br /&gt;
|-&lt;br /&gt;
| Compare and preserve&lt;br /&gt;
| Git under MSYS2&lt;br /&gt;
| A diff and recoverable checkpoint&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The distinction between these environments will be repeated throughout this essay because it prevents one of the most confusing failures in the workflow:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Use MSYS2 to edit and manage the project, but run the wxPerl application using Strawberry Perl.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
MSYS2 may have its own Perl. That Perl is not the Perl against which the selected wxPerl stack was built.&lt;br /&gt;
&lt;br /&gt;
== Begin with a tested profile ==&lt;br /&gt;
&lt;br /&gt;
A craftsman may enjoy experimenting with the newest tools, but he should first establish a known working reference point.&lt;br /&gt;
&lt;br /&gt;
The living version matrix is maintained at [[Developing and Distributing wxPerl Applications on Windows#More Specific Version Combinations with Detailed Instructions &amp;amp; Links|Developing and Distributing wxPerl Applications on Windows]]. At the time this essay was prepared, the documented profiles included:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Selected wxPerl installation profiles&lt;br /&gt;
! Status&lt;br /&gt;
! Strawberry Perl&lt;br /&gt;
! &amp;lt;code&amp;gt;Alien::wxWidgets&amp;lt;/code&amp;gt;&lt;br /&gt;
! &amp;lt;code&amp;gt;Wx&amp;lt;/code&amp;gt;&lt;br /&gt;
! Use&lt;br /&gt;
|-&lt;br /&gt;
| Previously tested reference&lt;br /&gt;
| 5.40.2.1, 64-bit UCRT MSI&lt;br /&gt;
| 0.71&lt;br /&gt;
| 3.008&lt;br /&gt;
| The safer starting point for reproducing the established workflow&lt;br /&gt;
|-&lt;br /&gt;
| Newer PDL-oriented profile&lt;br /&gt;
| 5.42.2.1, 64-bit UCRT PDL ZIP&lt;br /&gt;
| 0.73&lt;br /&gt;
| 3.009&lt;br /&gt;
| A newer path which should be treated according to the current verification status on the wiki&lt;br /&gt;
|-&lt;br /&gt;
| Archived reference&lt;br /&gt;
| 5.40.0.1, 64-bit UCRT MSI&lt;br /&gt;
| 0.70&lt;br /&gt;
| 3.005&lt;br /&gt;
| Historical comparison and regression troubleshooting&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The exact versions will change. This essay therefore explains the process using the previously tested 5.40.2.1 profile, while the maintained installation page remains authoritative for current links and newly verified combinations.&lt;br /&gt;
&lt;br /&gt;
A tested profile is not a claim that newer software is bad.&lt;br /&gt;
&lt;br /&gt;
It is a statement about evidence.&lt;br /&gt;
&lt;br /&gt;
The programmer who chooses an experimental profile should record that decision. He should not later describe the result as though it had received the same testing as the reference profile.&lt;br /&gt;
&lt;br /&gt;
== Prepare a work record before installing anything ==&lt;br /&gt;
&lt;br /&gt;
Create a plain-text file named:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wxperl-environment.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Record:&lt;br /&gt;
&lt;br /&gt;
* the date;&lt;br /&gt;
* Windows edition and version;&lt;br /&gt;
* whether the system is 64-bit;&lt;br /&gt;
* the selected Strawberry Perl profile;&lt;br /&gt;
* the selected &amp;lt;code&amp;gt;Alien::wxWidgets&amp;lt;/code&amp;gt; version;&lt;br /&gt;
* the selected &amp;lt;code&amp;gt;Wx&amp;lt;/code&amp;gt; version;&lt;br /&gt;
* the wxGlade version;&lt;br /&gt;
* the Python version used by wxGlade;&lt;br /&gt;
* the MSYS2 installation date;&lt;br /&gt;
* and links to the instructions followed.&lt;br /&gt;
&lt;br /&gt;
This file is not bureaucracy.&lt;br /&gt;
&lt;br /&gt;
It is a record of the workshop at the moment it was built. Six months later, when another machine behaves differently, the file may be more useful than memory.&lt;br /&gt;
&lt;br /&gt;
Create a directory for installation logs as well:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
C:\wxperl-shop\logs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The installation BAT file being developed for the Perl Lazarus Project should eventually automate much of this work. It should preserve the same order and should make each stage visible:&lt;br /&gt;
&lt;br /&gt;
# identify the selected profile;&lt;br /&gt;
# run one installation stage;&lt;br /&gt;
# preserve its output;&lt;br /&gt;
# stop clearly when that stage fails;&lt;br /&gt;
# verify the result;&lt;br /&gt;
# and continue only when the layer beneath it is sound.&lt;br /&gt;
&lt;br /&gt;
The batch file should preserve successful labor. It should not turn the installation into an unknowable ritual.&lt;br /&gt;
&lt;br /&gt;
The manual steps remain important because they allow the craftsman to understand and repair the automated process.&lt;br /&gt;
&lt;br /&gt;
== Install Strawberry Perl ==&lt;br /&gt;
&lt;br /&gt;
For the previously tested profile, use the instructions at:&lt;br /&gt;
&lt;br /&gt;
* [[Wx 3.008, Alien::wxWidgets 0.71, Strawberry Perl 5.40.2.1]]&lt;br /&gt;
&lt;br /&gt;
The documented installer is the 64-bit UCRT MSI distribution of Strawberry Perl 5.40.2.1.&lt;br /&gt;
&lt;br /&gt;
Run the installer normally. When it completes, close any command windows which were already open. A terminal started before installation may not see the updated &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Open:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Start menu → Strawberry Perl → Perl (command line)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This should produce an ordinary Windows command prompt prepared for Strawberry Perl.&lt;br /&gt;
&lt;br /&gt;
Run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
where perl&lt;br /&gt;
perl -v&lt;br /&gt;
perl -V:archname&lt;br /&gt;
perl -V:cc&lt;br /&gt;
where gcc&lt;br /&gt;
where gmake&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first &amp;lt;code&amp;gt;perl&amp;lt;/code&amp;gt; reported by &amp;lt;code&amp;gt;where perl&amp;lt;/code&amp;gt; should be the intended Strawberry Perl executable, normally under a path resembling:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
C:\Strawberry\perl\bin\perl.exe&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The exact compiler version is less important than proving that Strawberry Perl&#039;s compiler and build tools are available.&lt;br /&gt;
&lt;br /&gt;
Save the output:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
where perl                         &amp;gt;  C:\wxperl-shop\logs\strawberry-baseline.txt&lt;br /&gt;
perl -v                           &amp;gt;&amp;gt; C:\wxperl-shop\logs\strawberry-baseline.txt&lt;br /&gt;
perl -V:archname                  &amp;gt;&amp;gt; C:\wxperl-shop\logs\strawberry-baseline.txt&lt;br /&gt;
perl -V:cc                        &amp;gt;&amp;gt; C:\wxperl-shop\logs\strawberry-baseline.txt&lt;br /&gt;
where gcc                         &amp;gt;&amp;gt; C:\wxperl-shop\logs\strawberry-baseline.txt&lt;br /&gt;
where gmake                       &amp;gt;&amp;gt; C:\wxperl-shop\logs\strawberry-baseline.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Do not proceed until the intended Perl is clear.&lt;br /&gt;
&lt;br /&gt;
A large number of Windows development failures are not failures of the language or module under examination. They are failures to identify which executable is actually running.&lt;br /&gt;
&lt;br /&gt;
== Install Alien::wxWidgets ==&lt;br /&gt;
&lt;br /&gt;
Remain in the Strawberry Perl command-line window.&lt;br /&gt;
&lt;br /&gt;
For the tested profile, run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cpanm --verbose https://github.com/sciurius/perl-Alien-wxWidgets/releases/download/R0.71/Alien-wxWidgets-0.71.tar.gz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Preserve the output if practical:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cpanm --verbose https://github.com/sciurius/perl-Alien-wxWidgets/releases/download/R0.71/Alien-wxWidgets-0.71.tar.gz &amp;gt; C:\wxperl-shop\logs\alien-wxwidgets-install.txt 2&amp;gt;&amp;amp;1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This stage may require time. Native libraries and build configuration are involved.&lt;br /&gt;
&lt;br /&gt;
Do not mistake a quiet period for certain failure. Do not mistake a long stream of compiler output for success either.&lt;br /&gt;
&lt;br /&gt;
Wait for the final result.&lt;br /&gt;
&lt;br /&gt;
Then verify:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
perl -MAlien::wxWidgets -e &amp;quot;print qq{Alien::wxWidgets $Alien::wxWidgets::VERSION\n}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For this profile, the output should identify version 0.71.&lt;br /&gt;
&lt;br /&gt;
If Perl reports that the module cannot be found, do not attempt to install &amp;lt;code&amp;gt;Wx&amp;lt;/code&amp;gt; repeatedly in the hope that the missing layer will repair itself. Read the log and correct this stage first.&lt;br /&gt;
&lt;br /&gt;
== Install Wx / wxPerl ==&lt;br /&gt;
&lt;br /&gt;
Once &amp;lt;code&amp;gt;Alien::wxWidgets&amp;lt;/code&amp;gt; is installed and can be loaded, install the Perl binding:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cpanm --verbose https://github.com/sciurius/wxPerl/releases/download/R3.008/Wx-3.008.tar.gz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To preserve the complete output:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cpanm --verbose https://github.com/sciurius/wxPerl/releases/download/R3.008/Wx-3.008.tar.gz &amp;gt; C:\wxperl-shop\logs\wxperl-install.txt 2&amp;gt;&amp;amp;1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then verify:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
perl -MWx -e &amp;quot;print qq{Wx $Wx::VERSION\n}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The selected profile should report:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Wx 3.008&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also verify both layers in one command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
perl -MAlien::wxWidgets -MWx -e &amp;quot;print qq{Alien::wxWidgets $Alien::wxWidgets::VERSION\nWx $Wx::VERSION\n}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A successful module load is important, but it is not yet a complete graphical test.&lt;br /&gt;
&lt;br /&gt;
The binding must create an application and enter the Windows event loop.&lt;br /&gt;
&lt;br /&gt;
== Run a minimal hand-written wxPerl application ==&lt;br /&gt;
&lt;br /&gt;
Create:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
C:\wxperl-shop\hello-wx.pl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
with the following contents:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
use strict;&lt;br /&gt;
use warnings;&lt;br /&gt;
use Wx;&lt;br /&gt;
&lt;br /&gt;
package HelloWxApp;&lt;br /&gt;
use parent &#039;Wx::App&#039;;&lt;br /&gt;
&lt;br /&gt;
sub OnInit {&lt;br /&gt;
    my ($self) = @_;&lt;br /&gt;
&lt;br /&gt;
    my $frame = Wx::Frame-&amp;gt;new(&lt;br /&gt;
        undef,&lt;br /&gt;
        -1,&lt;br /&gt;
        &#039;The Perl Lazarus Workshop&#039;,&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
    $frame-&amp;gt;SetSize(640, 360);&lt;br /&gt;
    $frame-&amp;gt;Centre();&lt;br /&gt;
    $frame-&amp;gt;Show(1);&lt;br /&gt;
&lt;br /&gt;
    return 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
package main;&lt;br /&gt;
&lt;br /&gt;
my $app = HelloWxApp-&amp;gt;new();&lt;br /&gt;
$app-&amp;gt;MainLoop();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Run it from the Strawberry Perl terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /d C:\wxperl-shop&lt;br /&gt;
perl hello-wx.pl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A blank frame titled “The Perl Lazarus Workshop” should appear.&lt;br /&gt;
&lt;br /&gt;
This small program proves several things at once:&lt;br /&gt;
&lt;br /&gt;
* Strawberry Perl is active.&lt;br /&gt;
* &amp;lt;code&amp;gt;Wx&amp;lt;/code&amp;gt; can be loaded.&lt;br /&gt;
* The native wxWidgets libraries can be found.&lt;br /&gt;
* A Windows frame can be created.&lt;br /&gt;
* The event loop can run.&lt;br /&gt;
* The application can close normally.&lt;br /&gt;
&lt;br /&gt;
Do not dismiss the blank window as trivial.&lt;br /&gt;
&lt;br /&gt;
It is the first physical proof that the shop has been raised.&lt;br /&gt;
&lt;br /&gt;
== Install and run Wx::Demo ==&lt;br /&gt;
&lt;br /&gt;
The next verification is broader.&lt;br /&gt;
&lt;br /&gt;
From the Strawberry Perl terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cpanm --verbose Wx::Demo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wxperl_demo.pl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Wx::Demo&amp;lt;/code&amp;gt; provides working examples of controls and facilities exposed through wxPerl. It is both a verification program and an early reference catalog.&lt;br /&gt;
&lt;br /&gt;
Spend some time opening examples.&lt;br /&gt;
&lt;br /&gt;
Look at:&lt;br /&gt;
&lt;br /&gt;
* buttons and text controls;&lt;br /&gt;
* list and tree controls;&lt;br /&gt;
* notebooks;&lt;br /&gt;
* menus;&lt;br /&gt;
* dialogs;&lt;br /&gt;
* drawing examples;&lt;br /&gt;
* timers;&lt;br /&gt;
* and event handling.&lt;br /&gt;
&lt;br /&gt;
The purpose is not to memorize the entire toolkit. It is to understand that wxPerl is larger than the blank frame and that many common interface patterns already have working examples.&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;code&amp;gt;hello-wx.pl&amp;lt;/code&amp;gt; runs but &amp;lt;code&amp;gt;Wx::Demo&amp;lt;/code&amp;gt; does not, the error is narrower than it would have been without the first test. The core binding works; the problem lies in the additional module, its scripts, or its dependencies.&lt;br /&gt;
&lt;br /&gt;
This is why the craftsman tests in layers.&lt;br /&gt;
&lt;br /&gt;
== Install wxGlade ==&lt;br /&gt;
&lt;br /&gt;
[[File:WxgladeWinExample.png|thumb|right|380px|alt=wxGlade running on Windows while designing a GUI for a wxPerl application|wxGlade supplies the visual portion of the shop. It is written using wxPython, but it can emit Perl source code directly.]]&lt;br /&gt;
&lt;br /&gt;
wxGlade is a separate application. It is written using Python and wxPython, even though the application being developed will use Perl and wxPerl.&lt;br /&gt;
&lt;br /&gt;
That is not a contradiction.&lt;br /&gt;
&lt;br /&gt;
A tool need not be written in the same language as the work it helps produce.&lt;br /&gt;
&lt;br /&gt;
The tested recipe currently documented at [[Developing and Distributing wxPerl Applications on Windows#wxGlade - a Perl Friendly Cross-Platform GUI Builder|Developing and Distributing wxPerl Applications on Windows]] uses:&lt;br /&gt;
&lt;br /&gt;
* Python 3.10.11;&lt;br /&gt;
* wxPython installed through &amp;lt;code&amp;gt;pip&amp;lt;/code&amp;gt;;&lt;br /&gt;
* and wxGlade 1.1.1.&lt;br /&gt;
&lt;br /&gt;
Later Python combinations may work, but the living page should be consulted before replacing a tested profile merely because a newer Python release exists.&lt;br /&gt;
&lt;br /&gt;
Install Python 3.10.11 using the link in the maintained instructions. Enable the option to add Python to the Windows &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Open a normal Windows Command Prompt, not the Strawberry Perl terminal, and verify:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
where python&lt;br /&gt;
python --version&lt;br /&gt;
python -m pip --version&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install wxPython:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
python -m pip install wxPython&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download and unpack wxGlade 1.1.1. A reasonable location is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
C:\Tools\wxGlade-1.1.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change to that directory:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /d C:\Tools\wxGlade-1.1.1&lt;br /&gt;
python wxglade.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the distribution provides &amp;lt;code&amp;gt;wxglade.pyw&amp;lt;/code&amp;gt;, it can also be launched without retaining a console window.&lt;br /&gt;
&lt;br /&gt;
Create a small wrapper named:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
C:\Tools\wxGlade-1.1.1\start-wxglade.cmd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@echo off&lt;br /&gt;
cd /d &amp;quot;C:\Tools\wxGlade-1.1.1&amp;quot;&lt;br /&gt;
start &amp;quot;&amp;quot; pythonw wxglade.pyw&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Adjust the path and filename to match the actual installation.&lt;br /&gt;
&lt;br /&gt;
A Windows shortcut may then point to &amp;lt;code&amp;gt;start-wxglade.cmd&amp;lt;/code&amp;gt;. The change of directory is useful because wxGlade may expect to find supporting files relative to its own directory.&lt;br /&gt;
&lt;br /&gt;
The desktop shortcut is not a mere convenience. A tool used frequently should be easy to start correctly. Requiring the programmer to remember a fragile launch ritual creates needless opportunities for error.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Install MSYS2, vim, and Git ==&lt;br /&gt;
&lt;br /&gt;
MSYS2 provides a Unix-like terminal and package-management environment for Windows.&amp;lt;ref&amp;gt;[https://www.msys2.org/docs/what-is-msys2/ MSYS2, “What is MSYS2?”]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install MSYS2 using its current official installer. Follow the official update procedure, which may require closing and reopening the terminal during a full system update.&lt;br /&gt;
&lt;br /&gt;
Then install vim and Git:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pacman -S vim git&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verify:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vim --version&lt;br /&gt;
git --version&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If Git will communicate with a remote repository over SSH, create or import the appropriate key and register the public key with the remote service.&lt;br /&gt;
&lt;br /&gt;
A useful optional &amp;lt;code&amp;gt;~/.vimrc&amp;lt;/code&amp;gt; for the author&#039;s preferred MSYS2 workflow is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set mouse=&lt;br /&gt;
set noautoindent&lt;br /&gt;
set nosmartindent&lt;br /&gt;
set nocindent&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These are personal workflow choices rather than universal requirements. They make ordinary terminal copying easier and prevent automatic indentation from interfering with pasted or generated blocks.&lt;br /&gt;
&lt;br /&gt;
The critical check is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
which perl&lt;br /&gt;
perl -v&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inside MSYS2, the reported Perl may be:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/usr/bin/perl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is not Strawberry Perl.&lt;br /&gt;
&lt;br /&gt;
That is acceptable because MSYS2 is being used for vim, Git, shell navigation, and source inspection.&lt;br /&gt;
&lt;br /&gt;
Do not use that Perl to run the generated wxPerl application.&lt;br /&gt;
&lt;br /&gt;
Use the Strawberry Perl command-line window for:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
perl your-application.pl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and later for:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cpanm&lt;br /&gt;
wxpar&lt;br /&gt;
pp_autolink&lt;br /&gt;
gmake&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following table should remain mentally visible:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Two terminals, two responsibilities&lt;br /&gt;
! Environment&lt;br /&gt;
! Use it for&lt;br /&gt;
! Do not assume&lt;br /&gt;
|-&lt;br /&gt;
| MSYS2&lt;br /&gt;
| vim, Git, SSH, diffs, shell navigation&lt;br /&gt;
| That its &amp;lt;code&amp;gt;perl&amp;lt;/code&amp;gt; is Strawberry Perl&lt;br /&gt;
|-&lt;br /&gt;
| Strawberry Perl command line&lt;br /&gt;
| Perl modules, wxPerl execution, application tests, packaging&lt;br /&gt;
| That Unix paths or MSYS2-specific shell behavior will apply&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A craftsman should know which shop he is standing in.&lt;br /&gt;
&lt;br /&gt;
== Create the first project directory ==&lt;br /&gt;
&lt;br /&gt;
Use a simple project for the first complete cycle.&lt;br /&gt;
&lt;br /&gt;
From the MSYS2 terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir -p /c/work/hello-wxperl/screenshots&lt;br /&gt;
cd /c/work/hello-wxperl&lt;br /&gt;
git init&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create a short &amp;lt;code&amp;gt;README.md&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Hello wxPerl&lt;br /&gt;
&lt;br /&gt;
First wxGlade-generated wxPerl project created while raising the&lt;br /&gt;
Perl Lazarus development shop.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The directory will eventually contain:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
hello-wxperl/&lt;br /&gt;
├── hello-wxperl.wxg&lt;br /&gt;
├── hello-wxperl.pl&lt;br /&gt;
├── README.md&lt;br /&gt;
└── screenshots/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is intentionally smaller than the structure of a production application.&lt;br /&gt;
&lt;br /&gt;
The purpose is to prove the cycle before introducing application modules, tests, build directories, installer files, and documentation.&lt;br /&gt;
&lt;br /&gt;
== Design the first interface in wxGlade ==&lt;br /&gt;
&lt;br /&gt;
Open wxGlade.&lt;br /&gt;
&lt;br /&gt;
Create a new application containing:&lt;br /&gt;
&lt;br /&gt;
* one frame;&lt;br /&gt;
* one panel;&lt;br /&gt;
* one vertical box sizer;&lt;br /&gt;
* one static-text control;&lt;br /&gt;
* one button.&lt;br /&gt;
&lt;br /&gt;
Use names which communicate purpose:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Object&lt;br /&gt;
! Suggested name&lt;br /&gt;
! Label&lt;br /&gt;
|-&lt;br /&gt;
| Frame&lt;br /&gt;
| &amp;lt;code&amp;gt;MainFrame&amp;lt;/code&amp;gt;&lt;br /&gt;
| The Perl Lazarus Workshop&lt;br /&gt;
|-&lt;br /&gt;
| Static text&lt;br /&gt;
| &amp;lt;code&amp;gt;status_text&amp;lt;/code&amp;gt;&lt;br /&gt;
| The shop is ready.&lt;br /&gt;
|-&lt;br /&gt;
| Button&lt;br /&gt;
| &amp;lt;code&amp;gt;hello_button&amp;lt;/code&amp;gt;&lt;br /&gt;
| Test wxPerl&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Select the root &#039;&#039;&#039;Application&#039;&#039;&#039; object in the wxGlade object tree.&lt;br /&gt;
&lt;br /&gt;
Set:&lt;br /&gt;
&lt;br /&gt;
* output language to &#039;&#039;&#039;Perl&#039;&#039;&#039;;&lt;br /&gt;
* wxWidgets compatibility to &#039;&#039;&#039;3.0&#039;&#039;&#039;;&lt;br /&gt;
* output path to the project Perl file;&lt;br /&gt;
* code generation to &#039;&#039;&#039;Single file&#039;&#039;&#039;;&lt;br /&gt;
* and &#039;&#039;&#039;Keep user code&#039;&#039;&#039; to enabled.&lt;br /&gt;
&lt;br /&gt;
[[File:Applicationsettings.png|thumb|left|330px|alt=wxGlade application output settings configured for Perl code generation and preservation of user code|The important initial wxGlade settings include Perl output and Keep user code. Without code preservation, a later generation may overwrite handwritten work.]]&lt;br /&gt;
&lt;br /&gt;
Save the wxGlade project as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
C:\work\hello-wxperl\hello-wxperl.wxg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Set the Perl output file to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
C:\work\hello-wxperl\hello-wxperl.pl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Press:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Ctrl-G&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to generate the Perl source.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;.wxg&amp;lt;/code&amp;gt; file is not the Perl program. It is the XML project describing the visual design.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;.pl&amp;lt;/code&amp;gt; file is the code emitted from that design.&lt;br /&gt;
&lt;br /&gt;
Both are valuable source artifacts and both should be kept in Git.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Inspect what wxGlade emitted ==&lt;br /&gt;
&lt;br /&gt;
Return to the MSYS2 terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /c/work/hello-wxperl&lt;br /&gt;
ls -l&lt;br /&gt;
vim hello-wxperl.pl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Do not immediately begin changing random portions of the generated code.&lt;br /&gt;
&lt;br /&gt;
First inspect:&lt;br /&gt;
&lt;br /&gt;
* the packages wxGlade created;&lt;br /&gt;
* the frame constructor;&lt;br /&gt;
* the controls;&lt;br /&gt;
* the sizers;&lt;br /&gt;
* the generated identifiers;&lt;br /&gt;
* the event-handler placeholders;&lt;br /&gt;
* the application class;&lt;br /&gt;
* and the final call to the event loop.&lt;br /&gt;
&lt;br /&gt;
Look for wxGlade&#039;s generated-code markers. Their exact form may change among releases, but they identify sections which wxGlade owns and may regenerate.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;Keep user code&#039;&#039;&#039; option is intended to preserve code outside those protected generation blocks.&lt;br /&gt;
&lt;br /&gt;
It is not permission to ignore source control.&lt;br /&gt;
&lt;br /&gt;
Before adding handwritten behavior, commit the generated baseline:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git add hello-wxperl.wxg hello-wxperl.pl README.md&lt;br /&gt;
git commit -m &amp;quot;Generate initial wxGlade wxPerl application&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now there is a recoverable point before the first manual edit.&lt;br /&gt;
&lt;br /&gt;
== Run the generated Perl with Strawberry Perl ==&lt;br /&gt;
&lt;br /&gt;
Open the Strawberry Perl command-line window.&lt;br /&gt;
&lt;br /&gt;
Run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /d C:\work\hello-wxperl&lt;br /&gt;
where perl&lt;br /&gt;
perl hello-wxperl.pl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The frame should appear with the static text and button.&lt;br /&gt;
&lt;br /&gt;
The button may not yet perform useful work. That is expected.&lt;br /&gt;
&lt;br /&gt;
At this stage the entire visual generation path has been verified:&lt;br /&gt;
&lt;br /&gt;
```text&lt;br /&gt;
wxGlade .wxg project&lt;br /&gt;
        ↓&lt;br /&gt;
Perl source emission&lt;br /&gt;
        ↓&lt;br /&gt;
Strawberry Perl&lt;br /&gt;
        ↓&lt;br /&gt;
wxPerl / wxWidgets&lt;br /&gt;
        ↓&lt;br /&gt;
Windows frame&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=The_Perl_Lazarus_Workshop&amp;diff=375</id>
		<title>The Perl Lazarus Workshop</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=The_Perl_Lazarus_Workshop&amp;diff=375"/>
		<updated>2026-07-20T04:36:33Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:The Perl Lazarus Workshop}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This is the second essay in the series [[Portal:Essays about The Virtuous Perl Programmer|Essays about The Virtuous Perl Programmer]]. It follows [[The Perl Craftsman Returns to the Windows Desktop]] and explains the tools chosen for the Perl Lazarus Project.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A craftsman does not require every tool in his workshop to have been forged by the same smith.&lt;br /&gt;
&lt;br /&gt;
He requires tools which are sound, tools whose purposes he understands, and tools which can be arranged into a dependable way of working.&lt;br /&gt;
&lt;br /&gt;
The Perl programmer who wants to build a Windows desktop application already possesses the most important part of the workshop: Perl itself, together with the knowledge accumulated through years of writing scripts, maintaining systems, serving websites, transforming data, communicating with databases, and solving problems which did not arrive in a convenient form.&lt;br /&gt;
&lt;br /&gt;
What has often been missing is not ability. It is a clear path through the remaining tools.&lt;br /&gt;
&lt;br /&gt;
Perl has long had graphical toolkits, Windows modules, packaging systems, database drivers, networking libraries, and access to native code. Yet the programmer who asks a simple practical question—&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
How do I begin with Perl code and end with a Windows application which another person can install?&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
—may discover that the answer is distributed among old documentation, CPAN modules, build systems, archived projects, present-day tools, mailing-list discussions, source repositories, and hard-won experience.&lt;br /&gt;
&lt;br /&gt;
The [[Developing and Distributing wxPerl Applications on Windows|Perl Lazarus Project workflow]] does not attempt to hide these tools behind an enormous new integrated development environment. Its first objective is more modest and, for the present need, more useful: identify a modern combination which works, explain what each part contributes, and document a journey which another Perl programmer can repeat.&lt;br /&gt;
&lt;br /&gt;
The resulting workshop consists principally of:&lt;br /&gt;
&lt;br /&gt;
* Strawberry Perl;&lt;br /&gt;
* wxWidgets;&lt;br /&gt;
* &amp;lt;code&amp;gt;Alien::wxWidgets&amp;lt;/code&amp;gt;;&lt;br /&gt;
* wxPerl;&lt;br /&gt;
* wxGlade;&lt;br /&gt;
* MSYS2, vim, and Git;&lt;br /&gt;
* PAR-based packaging tools;&lt;br /&gt;
* DLL-discovery tools;&lt;br /&gt;
* Inno Setup;&lt;br /&gt;
* and a separate clean Windows environment in which the finished work can be tested.&lt;br /&gt;
&lt;br /&gt;
These tools do not all perform the same kind of work. They form layers.&lt;br /&gt;
&lt;br /&gt;
Understanding those layers is more valuable than memorizing a list of commands.&lt;br /&gt;
&lt;br /&gt;
== A workshop, not a monolith ==&lt;br /&gt;
&lt;br /&gt;
[[File:FreeAPIGUI.png|thumb|right|340px|alt=A wxPerl graphical application running as a Windows executable|The practical objective of the workshop is not merely a Perl script with a window, but a complete Windows application which users can run without installing the developer&#039;s toolchain.]]&lt;br /&gt;
&lt;br /&gt;
The Free Pascal Lazarus IDE provides part of the inspiration for the Perl Lazarus Project because it presents application development as a coherent activity.&lt;br /&gt;
&lt;br /&gt;
A Lazarus programmer can install an environment, create a project, place controls on a form, connect those controls to code, compile the application, and begin distributing the result. Around that process has grown a productive community of component authors, application developers, teachers, consultants, publishers, support providers, and specialist toolmakers.&lt;br /&gt;
&lt;br /&gt;
This is more significant than the presence of any one editor or form designer.&lt;br /&gt;
&lt;br /&gt;
The Lazarus and Free Pascal community demonstrates how a language community can support a practical micro-economy. The compiler may be freely available, but books still require authors. Components require maintainers. Applications require designers, testers, documenters, trainers, and support providers. Businesses and specialist communities still need programmers who understand their particular work.&lt;br /&gt;
&lt;br /&gt;
Shared tools do not abolish human labor. They make new forms of labor possible.&lt;br /&gt;
&lt;br /&gt;
Perl does not presently need to reproduce the entire Lazarus IDE in order to benefit from this example. The tools required for an effective Windows workshop already exist. The immediate need is to arrange them coherently.&lt;br /&gt;
&lt;br /&gt;
The Perl Lazarus Workshop is therefore deliberately plural. One program supplies the Perl environment. Another supplies the graphical library. Another generates the interface code. Another provides a familiar editing shell. Several tools cooperate to construct the executable. Another creates the installer.&lt;br /&gt;
&lt;br /&gt;
This arrangement may initially appear less elegant than a single commercial IDE. It also has advantages.&lt;br /&gt;
&lt;br /&gt;
Each tool can be understood independently. Each may be replaced when a better tool appears. The developer is not entirely dependent upon one vendor, one file format, or one abandoned product. The workflow can improve incrementally without requiring the whole workshop to be rebuilt at once.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Strawberry Perl: the foundation of the Windows shop ==&lt;br /&gt;
&lt;br /&gt;
The first layer is [https://strawberryperl.com/ Strawberry Perl].&lt;br /&gt;
&lt;br /&gt;
Strawberry Perl is not merely a Perl interpreter placed on Windows. It provides a native Perl distribution together with the compiler and build tools needed to install a broad range of CPAN modules, including modules containing XS or other native components.&amp;lt;ref&amp;gt;[https://strawberryperl.com/releases.html Strawberry Perl, “Releases”]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That distinction matters for wxPerl.&lt;br /&gt;
&lt;br /&gt;
A graphical binding to a substantial C++ library cannot be treated exactly like a small pure-Perl module. Native libraries must be built or supplied in compatible forms. Architectures must match. Compilers, DLLs, headers, and Perl configuration all matter.&lt;br /&gt;
&lt;br /&gt;
Strawberry Perl gives us a practical foundation upon which that native work can occur.&lt;br /&gt;
&lt;br /&gt;
It also provides tools which many Perl programmers already know how to use:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;perl&amp;lt;/code&amp;gt;;&lt;br /&gt;
* &amp;lt;code&amp;gt;cpan&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;cpanm&amp;lt;/code&amp;gt;;&lt;br /&gt;
* &amp;lt;code&amp;gt;gcc&amp;lt;/code&amp;gt;;&lt;br /&gt;
* &amp;lt;code&amp;gt;gmake&amp;lt;/code&amp;gt;;&lt;br /&gt;
* and the normal Perl library structure.&lt;br /&gt;
&lt;br /&gt;
This is one reason the Perl Lazarus Project emphasizes Strawberry Perl rather than requiring the user to construct a custom Perl environment from unrelated pieces.&lt;br /&gt;
&lt;br /&gt;
The chosen environment should still be treated as a tested combination rather than an abstract promise that every release will work with every other release. The maintained installation page records current, previously tested, experimental, and archived combinations:&lt;br /&gt;
&lt;br /&gt;
* [[Wx 3.008, Alien::wxWidgets 0.71, Strawberry Perl 5.40.2.1|a previously tested Strawberry Perl 5.40 and Wx 3.008 path]];&lt;br /&gt;
* [[Wx 3.009, Alien::wxWidgets 0.73, Strawberry Perl 5.42.2.1 PDL|a newer PDL-oriented Strawberry Perl 5.42 and Wx 3.009 path]];&lt;br /&gt;
* and older combinations which remain useful when investigating regressions.&lt;br /&gt;
&lt;br /&gt;
This distinction between a &#039;&#039;known working profile&#039;&#039; and the &#039;&#039;newest possible profile&#039;&#039; is an exercise in practical wisdom.&lt;br /&gt;
&lt;br /&gt;
A craftsman may experiment with newer tools. He should not confuse experimentation with a promise to users.&lt;br /&gt;
&lt;br /&gt;
== wxWidgets: a mature graphical foundation ==&lt;br /&gt;
&lt;br /&gt;
The graphical foundation beneath wxPerl is [https://wxwidgets.org/ wxWidgets].&lt;br /&gt;
&lt;br /&gt;
wxWidgets began as an effort to create portable graphical applications for Unix and Windows and later expanded to support additional operating systems and graphical back ends.&amp;lt;ref&amp;gt;[https://wxwidgets.org/about/ wxWidgets, “Overview”]&amp;lt;/ref&amp;gt; It supplies windows, dialogs, menus, controls, event handling, drawing facilities, printing support, internationalization, networking helpers, and many other facilities required by desktop applications.&lt;br /&gt;
&lt;br /&gt;
Its architecture is important.&lt;br /&gt;
&lt;br /&gt;
wxWidgets does not generally seek to make every application display an entirely artificial set of controls which merely resemble the host operating system. It provides ports which use the facilities of the underlying environment. On Windows, the result can behave and appear like a Windows application rather than like a foreign interface transported unchanged from another platform.&lt;br /&gt;
&lt;br /&gt;
This supports two related goals.&lt;br /&gt;
&lt;br /&gt;
First, the application can be familiar to the Windows user.&lt;br /&gt;
&lt;br /&gt;
Second, the programmer is not necessarily imprisoned within Windows forever. wxWidgets has always been concerned with cross-platform application development, even though this series intentionally concentrates on producing and distributing the Windows version first.&lt;br /&gt;
&lt;br /&gt;
wxWidgets also has a long history of associated development tools. Its own historical record includes commercial dialog and RAD products such as wxDesigner, while its broader ecosystem has included interface builders, component libraries, language bindings, books, and commercial support.&amp;lt;ref&amp;gt;[https://wxwidgets.org/about/history/ wxWidgets, “History”]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Readers interested in that longer story should consult [[Perl and wxWidgets RAD on Windows]], which records earlier Perl-capable GUI builders, discontinued packaging environments, and related attempts to provide an integrated Windows application workflow.&lt;br /&gt;
&lt;br /&gt;
The history matters because the Perl Lazarus Project did not arise in an empty field. It receives working pieces from earlier craftsmen, learns from abandoned paths, and attempts to preserve what can still be used.&lt;br /&gt;
&lt;br /&gt;
== Alien::wxWidgets: locating and describing the native library ==&lt;br /&gt;
&lt;br /&gt;
Between wxWidgets and the Perl binding sits &amp;lt;code&amp;gt;Alien::wxWidgets&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The name “Alien” can sound more mysterious than the function it performs. In the Perl ecosystem, an Alien distribution generally helps locate, build, or describe a non-Perl library needed by Perl modules.&lt;br /&gt;
&lt;br /&gt;
In this workshop, &amp;lt;code&amp;gt;Alien::wxWidgets&amp;lt;/code&amp;gt; provides the bridge between the native wxWidgets installation and the build of wxPerl. It records the information needed to compile and link the Perl binding against a suitable wxWidgets library.&lt;br /&gt;
&lt;br /&gt;
This layer is one reason version combinations matter.&lt;br /&gt;
&lt;br /&gt;
The relevant versions of:&lt;br /&gt;
&lt;br /&gt;
* Strawberry Perl;&lt;br /&gt;
* its compiler and runtime;&lt;br /&gt;
* wxWidgets;&lt;br /&gt;
* &amp;lt;code&amp;gt;Alien::wxWidgets&amp;lt;/code&amp;gt;;&lt;br /&gt;
* and &amp;lt;code&amp;gt;Wx&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
must agree sufficiently for the build to complete and the resulting programs to run.&lt;br /&gt;
&lt;br /&gt;
The installation script being developed for the Perl Lazarus Project exists to make this sequence repeatable. It does not abolish the need to understand the sequence.&lt;br /&gt;
&lt;br /&gt;
A good installation script should reveal:&lt;br /&gt;
&lt;br /&gt;
# which version is being installed;&lt;br /&gt;
# where it was obtained;&lt;br /&gt;
# which command is being run;&lt;br /&gt;
# where its output is logged;&lt;br /&gt;
# whether the stage succeeded;&lt;br /&gt;
# and how the result can be verified.&lt;br /&gt;
&lt;br /&gt;
Automation is valuable when it preserves successful labor and allows another person to reproduce it. It becomes dangerous when it conceals the state of the workshop from the craftsman who must later repair it.&lt;br /&gt;
&lt;br /&gt;
== wxPerl: placing wxWidgets in Perl hands ==&lt;br /&gt;
&lt;br /&gt;
The Perl binding itself is distributed as &amp;lt;code&amp;gt;Wx&amp;lt;/code&amp;gt; and is commonly called wxPerl.&lt;br /&gt;
&lt;br /&gt;
wxPerl allows a Perl program to create and control wxWidgets objects: applications, frames, panels, dialogs, buttons, text controls, lists, grids, notebooks, menus, status bars, timers, drawing contexts, and the many other facilities supplied by wxWidgets.&lt;br /&gt;
&lt;br /&gt;
This means the Perl programmer can bring existing Perl abilities directly into an event-driven desktop application.&lt;br /&gt;
&lt;br /&gt;
The database layer may still use DBI.&lt;br /&gt;
&lt;br /&gt;
The web client may still use familiar HTTP and JSON modules.&lt;br /&gt;
&lt;br /&gt;
The parser may still be the parser already tested in a command-line program or server process.&lt;br /&gt;
&lt;br /&gt;
The validation rules may still live in ordinary Perl modules.&lt;br /&gt;
&lt;br /&gt;
wxPerl does not require the craftsman to abandon the language in which the underlying work is already expressed. It gives that work a graphical point of contact with the user.&lt;br /&gt;
&lt;br /&gt;
The renewed ability to install and build wxPerl on current Windows environments owes much to the wxPerl revival work led by Johan Vromans and assisted by others who tested, corrected, and documented the modern build path.&amp;lt;ref&amp;gt;[https://dev.to/sciurius/wxperl-revival-5fde Johan Vromans, “wxPerl Revival”]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Perl Lazarus Project builds on that labor. It is not a claim to have independently recreated wxPerl. It is an effort to carry the revived binding further into a repeatable development, packaging, and distribution practice.&lt;br /&gt;
&lt;br /&gt;
The first verification after installation should therefore be visible and concrete. &amp;lt;code&amp;gt;Wx::Demo&amp;lt;/code&amp;gt; provides examples of many available controls and facilities, while a minimal application verifies that Perl can create a frame and enter the wxWidgets event loop.&lt;br /&gt;
&lt;br /&gt;
The third essay, [[Raising a Working wxPerl Shop on Windows]], will perform that verification in detail.&lt;br /&gt;
&lt;br /&gt;
== wxGlade: visual design which emits Perl ==&lt;br /&gt;
&lt;br /&gt;
[[File:WxgladeWinExample.png|thumb|left|380px|alt=wxGlade running on Windows while designing an interface for a wxPerl application|wxGlade is written using wxPython, but it can save the interface design as XML and emit Perl source code for a wxPerl application.]]&lt;br /&gt;
&lt;br /&gt;
wxPerl gives the programmer access to the graphical library, but constructing every interface entirely by hand can involve a large amount of mechanical work.&lt;br /&gt;
&lt;br /&gt;
Controls must be created, placed in sizers, connected to parent windows, assigned properties, and adjusted repeatedly as the layout develops.&lt;br /&gt;
&lt;br /&gt;
[https://wxglade.sourceforge.net/ wxGlade] provides a visual design environment for wxWidgets applications. It is written using wxPython, but this does not limit it to Python output. It can generate Python, C++, Perl, Lisp, and XRC.&amp;lt;ref&amp;gt;[https://wxglade.sourceforge.net/ wxGlade, project overview]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For the Perl Lazarus Workshop, the critical fact is simple:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
wxGlade emits Perl.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The craftsman can arrange a window visually, save the wxGlade project as a &amp;lt;code&amp;gt;.wxg&amp;lt;/code&amp;gt; XML file, and generate a Perl source file containing the corresponding wxPerl classes.&lt;br /&gt;
&lt;br /&gt;
This makes possible a RAD-like cycle:&lt;br /&gt;
&lt;br /&gt;
# Design or revise the interface in wxGlade.&lt;br /&gt;
# Save the &amp;lt;code&amp;gt;.wxg&amp;lt;/code&amp;gt; project.&lt;br /&gt;
# Generate Perl.&lt;br /&gt;
# Inspect the emitted changes.&lt;br /&gt;
# Add or revise application behavior.&lt;br /&gt;
# Run the program with Strawberry Perl.&lt;br /&gt;
# Return to wxGlade when the visual design changes.&lt;br /&gt;
&lt;br /&gt;
The [https://github.com/The-Perl-Cottage-Guild/wxPerl-wxGlade-Templates wxPerl and wxGlade template repository] contains example interfaces intended as starting points for this process. The templates include familiar window patterns and historical interface recreations which can be opened in wxGlade, examined, changed, and emitted as Perl.&lt;br /&gt;
&lt;br /&gt;
AI tools have also been effective in producing first-draft wxGlade XML files from natural-language descriptions. Those drafts are not final designs. They are materials brought into the workshop.&lt;br /&gt;
&lt;br /&gt;
The proper process remains human:&lt;br /&gt;
&lt;br /&gt;
# describe the intended interface;&lt;br /&gt;
# generate or obtain a first-draft &amp;lt;code&amp;gt;.wxg&amp;lt;/code&amp;gt; file;&lt;br /&gt;
# open it in wxGlade;&lt;br /&gt;
# inspect the hierarchy and properties;&lt;br /&gt;
# correct the layout;&lt;br /&gt;
# emit Perl;&lt;br /&gt;
# wire the application behavior;&lt;br /&gt;
# review the code;&lt;br /&gt;
# and test the result.&lt;br /&gt;
&lt;br /&gt;
AI may accelerate the preparation of material. It does not determine whether the interface serves the user, whether generated code is safe, or whether the application fulfills its promises.&lt;br /&gt;
&lt;br /&gt;
The craftsman remains responsible.&lt;br /&gt;
&lt;br /&gt;
Readers who need ideas for first projects may consult [[GUI ideas for use with wxGlade]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MSYS2, vim, and Git: recovering a familiar working rhythm ==&lt;br /&gt;
&lt;br /&gt;
A Windows application should be built and tested against Strawberry Perl, but the craftsman does not need to abandon a familiar Unix-like editing workflow.&lt;br /&gt;
&lt;br /&gt;
[https://www.msys2.org/ MSYS2] supplies a Unix-like command-line environment and a package manager for Windows.&amp;lt;ref&amp;gt;[https://www.msys2.org/docs/what-is-msys2/ MSYS2, “What is MSYS2?”]&amp;lt;/ref&amp;gt; Within its terminal, the programmer can install vim and Git:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pacman -S vim git&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This creates a productive division of labor.&lt;br /&gt;
&lt;br /&gt;
The MSYS2 terminal can be used for:&lt;br /&gt;
&lt;br /&gt;
* editing with vim;&lt;br /&gt;
* reviewing diffs;&lt;br /&gt;
* committing changes;&lt;br /&gt;
* managing branches;&lt;br /&gt;
* using SSH keys;&lt;br /&gt;
* navigating the project with familiar shell tools;&lt;br /&gt;
* and performing the normal source-control work of a Unix-oriented Perl programmer.&lt;br /&gt;
&lt;br /&gt;
The Strawberry Perl terminal should be used for:&lt;br /&gt;
&lt;br /&gt;
* installing Perl modules;&lt;br /&gt;
* running the wxPerl application;&lt;br /&gt;
* executing Perl-oriented build commands;&lt;br /&gt;
* creating the executable;&lt;br /&gt;
* and verifying behavior against the actual Perl environment intended by the project.&lt;br /&gt;
&lt;br /&gt;
This separation is not merely a personal preference. Installing Git and related packages in MSYS2 may also install an MSYS2 Perl. Running the application from that shell without checking the active &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt; can therefore invoke a different Perl than the Strawberry Perl for which wxPerl was built.&lt;br /&gt;
&lt;br /&gt;
The programmer should know which Perl is active.&lt;br /&gt;
&lt;br /&gt;
A workshop may contain two hammers. The craftsman must still know which one he has picked up.&lt;br /&gt;
&lt;br /&gt;
Git is particularly important when generated code is involved. wxGlade can preserve user code when configured properly, but configuration mistakes and generation changes can still damage handwritten work. A clean commit before generation gives the programmer a truthful record of what changed and a practical way to recover.&lt;br /&gt;
&lt;br /&gt;
The detailed edit–emit–wire–run workflow belongs to the next essay. Here it is enough to recognize that MSYS2 is not replacing Strawberry Perl. It restores a familiar editing and revision rhythm around it.&lt;br /&gt;
&lt;br /&gt;
== PAR, wxpar, and the hidden contents of an executable ==&lt;br /&gt;
&lt;br /&gt;
A working wxPerl script is not yet a distributable Windows product.&lt;br /&gt;
&lt;br /&gt;
The user should not be required to install Strawberry Perl, compile wxWidgets, install CPAN modules, configure environment variables, or reproduce the developer&#039;s workshop.&lt;br /&gt;
&lt;br /&gt;
PAR-based tools help collect the Perl interpreter, modules, and supporting material into a Windows executable.&lt;br /&gt;
&lt;br /&gt;
The current workshop uses:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;PAR::Packer&amp;lt;/code&amp;gt;;&lt;br /&gt;
* &amp;lt;code&amp;gt;Wx::Perl::Packager&amp;lt;/code&amp;gt;, which provides &amp;lt;code&amp;gt;wxpar&amp;lt;/code&amp;gt;;&lt;br /&gt;
* and &amp;lt;code&amp;gt;App::PP::Autolink&amp;lt;/code&amp;gt;, which provides &amp;lt;code&amp;gt;pp_autolink&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A minimal wxPerl packing command may look simple:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wxpar my-application.pl -o my-application.exe&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The real difficulty is often not the command. It is discovering everything the application needs.&lt;br /&gt;
&lt;br /&gt;
A script which makes HTTPS requests may depend upon OpenSSL and compression DLLs which were present in Strawberry Perl&#039;s directories during development but are not automatically obvious to the packager. The program may work perfectly on the craftsman&#039;s computer and fail immediately on the customer&#039;s.&lt;br /&gt;
&lt;br /&gt;
This is why &amp;lt;code&amp;gt;pp_autolink&amp;lt;/code&amp;gt; has proven especially valuable in the documented workflow. It helps discover native DLLs which must be linked explicitly into the packed application.&lt;br /&gt;
&lt;br /&gt;
The packaging layer therefore teaches an important lesson:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
A dependency which is invisible to the developer is not invisible to the user&#039;s computer.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A professional result requires dependency discovery, a repeatable build command, and testing away from the development installation.&lt;br /&gt;
&lt;br /&gt;
The current [[Developing and Distributing wxPerl Applications on Windows#Creating Windows EXEs|executable-building notes]] preserve this still-developing body of experience, including special cases involving HTTPS and &amp;lt;code&amp;gt;Net::SSLeay&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Martha: assistance at the difficult boundary ==&lt;br /&gt;
&lt;br /&gt;
The tool named Martha belongs near the far end of the workshop, not at its foundation.&lt;br /&gt;
&lt;br /&gt;
Martha does not replace Strawberry Perl, wxPerl, wxGlade, PAR, or Inno Setup. It is a wxPerl application created to assist with the difficult transition from a working Perl program to a package which can be installed and tested.&lt;br /&gt;
&lt;br /&gt;
Its present work includes assistance with:&lt;br /&gt;
&lt;br /&gt;
* discovering required DLLs;&lt;br /&gt;
* generating a Makefile based on &amp;lt;code&amp;gt;wxpar&amp;lt;/code&amp;gt;;&lt;br /&gt;
* allowing that Makefile to be reviewed and adjusted;&lt;br /&gt;
* running the executable build;&lt;br /&gt;
* generating an Inno Setup configuration;&lt;br /&gt;
* building the installer;&lt;br /&gt;
* and testing the resulting stages.&lt;br /&gt;
&lt;br /&gt;
The name is related to Lazarus, but Martha&#039;s role is deliberately practical. The Perl Lazarus Project describes the larger revival and workflow. Martha helps with some of the work which is repetitive, error-prone, and easy to perform inconsistently.&lt;br /&gt;
&lt;br /&gt;
The important principle is that the helper should expose the process rather than make it unknowable. The programmer should be able to inspect the generated Makefile, see the DLL paths, read the Inno Setup script, and reproduce the command outside the GUI.&lt;br /&gt;
&lt;br /&gt;
A good tool assists judgment. It does not demand the surrender of judgment.&lt;br /&gt;
&lt;br /&gt;
For current details, see [[Developing and Distributing wxPerl Applications on Windows#Martha - A lightweight wxPerl helper for packaging Perl applications on Windows|Martha&#039;s role in the documented workflow]].&lt;br /&gt;
&lt;br /&gt;
== Inno Setup: placing the work into the user&#039;s hands ==&lt;br /&gt;
&lt;br /&gt;
The final major tool in the workshop is [https://jrsoftware.org/isinfo.php Inno Setup].&lt;br /&gt;
&lt;br /&gt;
A Windows executable can sometimes be distributed as a portable file, but ordinary Windows users commonly expect an installer. The installer can:&lt;br /&gt;
&lt;br /&gt;
* place program files in an appropriate directory;&lt;br /&gt;
* create a Start menu entry;&lt;br /&gt;
* create an optional desktop shortcut;&lt;br /&gt;
* register an uninstaller;&lt;br /&gt;
* preserve or update configuration;&lt;br /&gt;
* install additional resources;&lt;br /&gt;
* record version information;&lt;br /&gt;
* and provide a familiar route for upgrades and removal.&lt;br /&gt;
&lt;br /&gt;
Inno Setup has existed since 1997 and provides a mature scriptable installer system for Windows.&amp;lt;ref&amp;gt;[https://jrsoftware.org/isinfo.php JRSoftware, “What is Inno Setup?”]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It also offers a good example of a tool which empowers apprentices, hobbyists, nonprofits, and small developers while reasonably asking commercial users to support the human labor behind it.&lt;br /&gt;
&lt;br /&gt;
The Inno Setup authors request that commercial users purchase a commercial license.&amp;lt;ref&amp;gt;[https://jrsoftware.org/isorder.php JRSoftware, “Inno Setup Commercial Licenses”]&amp;lt;/ref&amp;gt; The request should be respected.&lt;br /&gt;
&lt;br /&gt;
A Perl craftsman who expects users to compensate his own labor should not treat the labor of toolmakers as though it appeared without cost or obligation.&lt;br /&gt;
&lt;br /&gt;
The license is not merely an administrative detail. It is part of a just relationship among craftsmen.&lt;br /&gt;
&lt;br /&gt;
Inno Setup lowers the barrier to professional Windows distribution. It allows a small developer to offer an installation experience which might otherwise require a substantial commercial packaging product or a large amount of custom engineering. When that tool contributes to commercial income, purchasing the requested license is an orderly acknowledgment of the value received.&lt;br /&gt;
&lt;br /&gt;
The installer itself must also respect the user.&lt;br /&gt;
&lt;br /&gt;
It should not request administrative privileges without need. It should not overwrite user-created data carelessly. It should not make removal intentionally difficult. It should not hide unrelated software in the package. It should explain what it is installing and preserve what the user has created.&lt;br /&gt;
&lt;br /&gt;
The installer is not wrapping placed around the “real application.”&lt;br /&gt;
&lt;br /&gt;
For the user, installation is the beginning of the application.&lt;br /&gt;
&lt;br /&gt;
== The living workshop and the written recipe ==&lt;br /&gt;
&lt;br /&gt;
The exact working version combination will change.&lt;br /&gt;
&lt;br /&gt;
Strawberry Perl will release new builds. wxWidgets will advance. &amp;lt;code&amp;gt;Alien::wxWidgets&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Wx&amp;lt;/code&amp;gt; will be updated. wxGlade will correct problems and add features. Packaging tools will discover new edge cases. Windows will alter security behavior.&lt;br /&gt;
&lt;br /&gt;
A book or essay cannot freeze the workshop forever.&lt;br /&gt;
&lt;br /&gt;
This is why the series and the technical wiki serve different but complementary purposes.&lt;br /&gt;
&lt;br /&gt;
The essays explain:&lt;br /&gt;
&lt;br /&gt;
* why the tools were selected;&lt;br /&gt;
* how the layers relate;&lt;br /&gt;
* what kind of work each tool performs;&lt;br /&gt;
* and what virtues should govern their use.&lt;br /&gt;
&lt;br /&gt;
The living installation page records:&lt;br /&gt;
&lt;br /&gt;
* current download links;&lt;br /&gt;
* tested version combinations;&lt;br /&gt;
* experimental combinations;&lt;br /&gt;
* archived combinations;&lt;br /&gt;
* command lines;&lt;br /&gt;
* known failures;&lt;br /&gt;
* and corrections discovered through practice.&lt;br /&gt;
&lt;br /&gt;
The craftsman should consult both.&lt;br /&gt;
&lt;br /&gt;
A static essay without maintained instructions may become historically interesting but practically useless.&lt;br /&gt;
&lt;br /&gt;
A list of commands without an explanation of the workshop may work once while leaving the programmer unable to understand or repair it.&lt;br /&gt;
&lt;br /&gt;
Tradition requires both inherited wisdom and living application.&lt;br /&gt;
&lt;br /&gt;
== The craft and the virtue ==&lt;br /&gt;
&lt;br /&gt;
This stage of the journey is governed especially by practical wisdom, gratitude, justice, and humility.&lt;br /&gt;
&lt;br /&gt;
Practical wisdom asks what each tool is for.&lt;br /&gt;
&lt;br /&gt;
It prevents the programmer from selecting software merely because it is fashionable, entirely written in a preferred language, or advertised as capable of doing everything.&lt;br /&gt;
&lt;br /&gt;
Gratitude recognizes that the workshop is inherited.&lt;br /&gt;
&lt;br /&gt;
God is the source of creation, intelligence, talent, and opportunity. The programmer receives not only his own abilities, but also a world of prior human labor: operating systems, compilers, libraries, modules, editors, books, standards, and examples.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
“For wisdom is better than all the most precious things: and whatsoever may be desired cannot be compared to it.”&lt;br /&gt;
&amp;lt;br /&amp;gt;— Proverbs 8:11, Douay-Rheims&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Justice gives the human makers of those tools what is due to them.&lt;br /&gt;
&lt;br /&gt;
That may include:&lt;br /&gt;
&lt;br /&gt;
* obeying licenses;&lt;br /&gt;
* preserving notices;&lt;br /&gt;
* paying a reasonable commercial fee;&lt;br /&gt;
* reporting defects honestly;&lt;br /&gt;
* acknowledging authors;&lt;br /&gt;
* contributing corrections;&lt;br /&gt;
* supporting maintainers;&lt;br /&gt;
* or teaching another person what one has learned.&lt;br /&gt;
&lt;br /&gt;
Humility acknowledges that no one programmer created the entire workshop.&lt;br /&gt;
&lt;br /&gt;
The experienced Perl programmer may know far more about databases or server operations than the author of a GUI builder. The GUI-tool author may know far more about layout engines and code generation. The installer author may understand Windows installation behavior which the application programmer has never had to consider.&lt;br /&gt;
&lt;br /&gt;
The guild-minded craftsman does not resent this dependence. Human beings are made to receive from and contribute to one another.&lt;br /&gt;
&lt;br /&gt;
The tools themselves must remain properly ordered.&lt;br /&gt;
&lt;br /&gt;
Strawberry Perl serves the Perl programmer.&lt;br /&gt;
&lt;br /&gt;
wxWidgets serves the graphical application.&lt;br /&gt;
&lt;br /&gt;
wxGlade serves the designer.&lt;br /&gt;
&lt;br /&gt;
MSYS2 and vim serve the editing process.&lt;br /&gt;
&lt;br /&gt;
Git serves truthful revision and recovery.&lt;br /&gt;
&lt;br /&gt;
PAR serves distribution.&lt;br /&gt;
&lt;br /&gt;
Inno Setup serves installation.&lt;br /&gt;
&lt;br /&gt;
AI may assist preparation, explanation, and first drafts.&lt;br /&gt;
&lt;br /&gt;
None of them is the master.&lt;br /&gt;
&lt;br /&gt;
The human craftsman remains responsible for choosing the purpose, judging the result, keeping promises, protecting the user, and directing the work toward the good.&lt;br /&gt;
&lt;br /&gt;
== At the workbench: draw your workshop map ==&lt;br /&gt;
&lt;br /&gt;
Before installing the full stack, prepare a workshop inventory.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ The Perl Lazarus Workshop&lt;br /&gt;
! Layer&lt;br /&gt;
! Selected tool&lt;br /&gt;
! Work performed&lt;br /&gt;
! Verification&lt;br /&gt;
|-&lt;br /&gt;
| Perl environment&lt;br /&gt;
| Strawberry Perl&lt;br /&gt;
| Runs Perl and supplies native build tools&lt;br /&gt;
| Confirm the intended &amp;lt;code&amp;gt;perl.exe&amp;lt;/code&amp;gt;, architecture, and compiler&lt;br /&gt;
|-&lt;br /&gt;
| Native GUI library&lt;br /&gt;
| wxWidgets&lt;br /&gt;
| Supplies windows, controls, events, and platform integration&lt;br /&gt;
| Confirm the wxWidgets version used by wxPerl&lt;br /&gt;
|-&lt;br /&gt;
| Native-library bridge&lt;br /&gt;
| &amp;lt;code&amp;gt;Alien::wxWidgets&amp;lt;/code&amp;gt;&lt;br /&gt;
| Describes or supplies the wxWidgets build used by Perl&lt;br /&gt;
| Query the installed module version and build configuration&lt;br /&gt;
|-&lt;br /&gt;
| Perl GUI binding&lt;br /&gt;
| &amp;lt;code&amp;gt;Wx&amp;lt;/code&amp;gt; / wxPerl&lt;br /&gt;
| Makes wxWidgets available to Perl&lt;br /&gt;
| Run a minimal frame and &amp;lt;code&amp;gt;Wx::Demo&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Visual designer&lt;br /&gt;
| wxGlade&lt;br /&gt;
| Saves the visual design and emits Perl or XRC&lt;br /&gt;
| Generate and run a small Perl interface&lt;br /&gt;
|-&lt;br /&gt;
| Editing environment&lt;br /&gt;
| MSYS2 and vim&lt;br /&gt;
| Supplies a familiar Unix-like editing shell&lt;br /&gt;
| Confirm vim and the project paths&lt;br /&gt;
|-&lt;br /&gt;
| Revision control&lt;br /&gt;
| Git&lt;br /&gt;
| Preserves history, diffs, and recoverable checkpoints&lt;br /&gt;
| Create a repository and commit the generated project&lt;br /&gt;
|-&lt;br /&gt;
| Executable packaging&lt;br /&gt;
| PAR, &amp;lt;code&amp;gt;wxpar&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;pp_autolink&amp;lt;/code&amp;gt;&lt;br /&gt;
| Packages Perl and discovers native dependencies&lt;br /&gt;
| Run the EXE outside the Strawberry Perl terminal&lt;br /&gt;
|-&lt;br /&gt;
| Installer&lt;br /&gt;
| Inno Setup&lt;br /&gt;
| Produces the Windows installation experience&lt;br /&gt;
| Install, launch, upgrade, and uninstall on a clean machine&lt;br /&gt;
|-&lt;br /&gt;
| Independent test bench&lt;br /&gt;
| Clean Windows virtual machine or physical system&lt;br /&gt;
| Reveals dependencies accidentally supplied by the workshop&lt;br /&gt;
| Test without Strawberry Perl or the development tools installed&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For each tool, answer:&lt;br /&gt;
&lt;br /&gt;
# What exact task does it perform?&lt;br /&gt;
# Which other layer does it depend upon?&lt;br /&gt;
# Which version has actually been tested?&lt;br /&gt;
# How will success be verified?&lt;br /&gt;
# Where will installation and build logs be kept?&lt;br /&gt;
# What license governs its use?&lt;br /&gt;
# What labor and knowledge did its authors contribute?&lt;br /&gt;
# What would happen to the workflow if the tool disappeared?&lt;br /&gt;
# Is the project data stored in an open or inspectable format?&lt;br /&gt;
# Can the important build steps be reproduced without a graphical helper?&lt;br /&gt;
&lt;br /&gt;
The purpose is not to produce paperwork for its own sake.&lt;br /&gt;
&lt;br /&gt;
The map helps the craftsman understand his shop before something breaks.&lt;br /&gt;
&lt;br /&gt;
== Continue the journey ==&lt;br /&gt;
&lt;br /&gt;
The next essay, [[Raising a Working wxPerl Shop on Windows]], will assemble this workshop in practice.&lt;br /&gt;
&lt;br /&gt;
It will cover:&lt;br /&gt;
&lt;br /&gt;
* selecting a tested Strawberry Perl profile;&lt;br /&gt;
* using the Perl Lazarus installation BAT file;&lt;br /&gt;
* preserving installation logs;&lt;br /&gt;
* verifying &amp;lt;code&amp;gt;Alien::wxWidgets&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Wx&amp;lt;/code&amp;gt;;&lt;br /&gt;
* running &amp;lt;code&amp;gt;Wx::Demo&amp;lt;/code&amp;gt;;&lt;br /&gt;
* installing and launching wxGlade;&lt;br /&gt;
* configuring MSYS2, vim, and Git;&lt;br /&gt;
* generating the first Perl GUI;&lt;br /&gt;
* wiring an event;&lt;br /&gt;
* running it under Strawberry Perl;&lt;br /&gt;
* and committing the result.&lt;br /&gt;
&lt;br /&gt;
At the end of that essay, the reader should possess more than a collection of installed programs.&lt;br /&gt;
&lt;br /&gt;
He should possess a working shop, a generated wxPerl application, a known active Perl environment, and the beginning of a repeatable craft.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Perl Lazarus Workshop}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Previous essay:&#039;&#039;&#039; [[The Perl Craftsman Returns to the Windows Desktop]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Series:&#039;&#039;&#039; [[Portal:Essays about The Virtuous Perl Programmer|Essays about The Virtuous Perl Programmer]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Next essay:&#039;&#039;&#039; [[Raising a Working wxPerl Shop on Windows]]&lt;br /&gt;
&lt;br /&gt;
[[Category:The Virtuous Perl Programmer]]&lt;br /&gt;
[[Category:Perl Lazarus Project]]&lt;br /&gt;
[[Category:wxPerl]]&lt;br /&gt;
[[Category:Perl Guilds]]&lt;br /&gt;
[[Category:Windows]]&lt;br /&gt;
[[Category:Strawberry Perl]]&lt;br /&gt;
[[Category:wxWidgets]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=The_Perl_Craftsman_Returns_to_the_Windows_Desktop&amp;diff=374</id>
		<title>The Perl Craftsman Returns to the Windows Desktop</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=The_Perl_Craftsman_Returns_to_the_Windows_Desktop&amp;diff=374"/>
		<updated>2026-07-19T21:26:35Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:The Perl Craftsman Returns to the Windows Desktop}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This is the first essay in the series [[Portal:Essays about The Virtuous Perl Programmer|Essays about The Virtuous Perl Programmer]]. The series follows the practical journey from Perl programmer to craftsman of complete, distributable Windows applications.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
There comes a point in the life of a programmer when experience can become strangely tiring.&lt;br /&gt;
&lt;br /&gt;
The journeyman Perl programmer may have crossed many territories. He has repaired old systems, migrated databases, parsed uncooperative data, automated jobs, maintained web applications, connected APIs, managed servers, and rescued programs whose original authors disappeared years ago. He may have spent decades learning that the apparently simple problem is rarely simple, that data supplied by users never quite resembles the example, and that the machine which fails is usually not the machine on which the software was developed.&lt;br /&gt;
&lt;br /&gt;
The master Perl programmer may have done all of this while teaching others, supporting clients, maintaining community infrastructure, and carrying responsibility for systems which cannot simply be turned off and rewritten in the fashionable language of the year.&lt;br /&gt;
&lt;br /&gt;
Such a programmer is not obsolete. He may only be weary.&lt;br /&gt;
&lt;br /&gt;
The repeated announcement of Perl&#039;s death can become tiresome. So can working continually behind the scenes while newer communities rediscover techniques that Perl programmers have practiced for decades. The experienced Perl programmer may understandably ask whether there is any new territory worth crossing, or whether his remaining work consists only of maintaining what other people have abandoned.&lt;br /&gt;
&lt;br /&gt;
At the same time, a newer programmer may sit in front of a Windows computer and never encounter Perl at all. He may know that programs come from an application store, a game launcher, a download page, or a Git repository, but not yet understand that he can create those programs himself. He may be experimenting with game modifications, running a private server, editing configuration files, automating a repetitive task, or wondering how a favorite program works.&lt;br /&gt;
&lt;br /&gt;
He may, quite literally, be playing video games.&lt;br /&gt;
&lt;br /&gt;
Playing a game is not a lesser or shameful use of a computer. Recreation has its proper place. Yet games often place young people near modding, scripting, servers, digital art, online communities, hardware, configuration files, and technical curiosity. These can become entrances into a genuine craft.&lt;br /&gt;
&lt;br /&gt;
Some future Perl programmer is probably using a Windows computer right now without knowing that Perl exists.&lt;br /&gt;
&lt;br /&gt;
This series is addressed to both: the experienced craftsman who may need a new application for an old and powerful trade, and the prospective apprentice who has not yet discovered that programming can become his own craft.&lt;br /&gt;
&lt;br /&gt;
== The programmer as craftsman ==&lt;br /&gt;
&lt;br /&gt;
The language of the craftsman is useful because programming is not merely the manipulation of symbols. It is the application of knowledge, judgment, practiced skill, and responsibility to a human need.&lt;br /&gt;
&lt;br /&gt;
God is the Creator of the world, of the human person, and of every good thing upon which human work depends. The materials of the earth, the order discoverable within creation, the human capacity to reason, and the time and opportunity in which we work are not self-created possessions. They are gifts entrusted to us.&lt;br /&gt;
&lt;br /&gt;
Our talents also come from God. Intelligence, imagination, memory, patience, physical ability, experience, and the capacity to learn may be cultivated through discipline, but we did not first give these powers to ourselves.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
“What hast thou that thou hast not received?”&lt;br /&gt;
&amp;lt;br /&amp;gt;— 1 Corinthians 4:7, Douay-Rheims&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The programmer therefore creates only in a secondary and dependent sense. He does not create from nothing. He receives a world already made, abilities already given, knowledge preserved through the labor of others, and tools built by other craftsmen. Through his own labor he may then cultivate, combine, order, transform, and apply these gifts in ways which serve other persons.&lt;br /&gt;
&lt;br /&gt;
This dependence does not make human work insignificant. It gives work its proper dignity and purpose. Human labor is one of the means by which men and women develop the gifts of creation, provide for their families, serve their neighbors, form communities, and contribute to the common good.&lt;br /&gt;
&lt;br /&gt;
Work is ordered toward the good of persons because the human person is created by God and possesses a dignity which no employer, market, government, machine, or measure of productivity can bestow or remove. The programmer does not exist for the software, the company, or the market. Software, companies, and markets exist to serve human life and human communities.&lt;br /&gt;
&lt;br /&gt;
A technically impressive application which deceives its customers, degrades its workers, burdens its users, corrupts their work, or treats persons merely as sources of data and revenue cannot be considered excellent craftsmanship.&lt;br /&gt;
&lt;br /&gt;
The traditional progression from apprentice to journeyman to master should not be treated as a rigid credentialing system or as an excuse for excluding newcomers. It is a way of describing growth within a trade.&lt;br /&gt;
&lt;br /&gt;
* The &#039;&#039;&#039;apprentice&#039;&#039;&#039; learns the tools, vocabulary, habits, and established practices of the craft.&lt;br /&gt;
* The &#039;&#039;&#039;journeyman&#039;&#039;&#039; can travel beyond the workshop in which he first learned and apply his skills to unfamiliar problems.&lt;br /&gt;
* The &#039;&#039;&#039;master&#039;&#039;&#039; accepts responsibility for complete work, judges its quality, serves customers, preserves knowledge, and helps form other craftsmen.&lt;br /&gt;
&lt;br /&gt;
These names describe differences in skill, experience, and responsibility. They do not describe differences in human worth. The apprentice, journeyman, master, customer, and user possess the same God-given dignity.&lt;br /&gt;
&lt;br /&gt;
Mastery is achieved through the development of received talents, disciplined labor, experience, instruction, and grace. It gives the master greater responsibility, but it does not make him a higher kind of human being. Greater mastery creates greater obligations of honesty, patience, justice, humility, service, and care.&lt;br /&gt;
&lt;br /&gt;
The master should therefore receive the apprentice not merely as inexpensive labor, but as a person whose gifts should be discovered, cultivated, corrected, and encouraged.&lt;br /&gt;
&lt;br /&gt;
A journeyman is not merely someone who has memorized more syntax than an apprentice. He has learned how to proceed when the documentation is incomplete, the operating environment is unfamiliar, and the first solution does not work.&lt;br /&gt;
&lt;br /&gt;
A master is not someone who has stopped learning. He is someone whose experience has taught him the weight of a promise. When he says that a program can be installed, can preserve a user&#039;s data, or can be supported in a particular environment, he understands that another person&#039;s work may depend upon that claim.&lt;br /&gt;
&lt;br /&gt;
A master should also understand that knowledge is not diminished when it is handed on. The formation of an apprentice does not create a competitor who has stolen part of the master&#039;s trade. It strengthens the craft, preserves accumulated experience, and prepares another person to perform useful work.&lt;br /&gt;
&lt;br /&gt;
A masterwork is therefore not merely a clever algorithm, an ingenious regular expression, or an impressive piece of code. It is work brought to completion.&lt;br /&gt;
&lt;br /&gt;
For a Windows desktop application, that completion may include:&lt;br /&gt;
&lt;br /&gt;
* a useful and understandable graphical interface;&lt;br /&gt;
* dependable handling of files and data;&lt;br /&gt;
* communication with an existing Perl web service;&lt;br /&gt;
* a Windows executable;&lt;br /&gt;
* a familiar installer;&lt;br /&gt;
* useful documentation;&lt;br /&gt;
* testing on a computer other than the developer&#039;s;&lt;br /&gt;
* a reasonable upgrade and uninstallation path;&lt;br /&gt;
* and a plan for supporting the people who use it.&lt;br /&gt;
&lt;br /&gt;
The purpose of [[Main Page|Perl Guilds]] is to encourage this fuller understanding of the programmer&#039;s trade: independent programmers sharing knowledge, cultivating practical specialties, forming one another in the craft, and helping one another earn a living through useful work.&lt;br /&gt;
&lt;br /&gt;
== An invitation to the weary journeyman ==&lt;br /&gt;
&lt;br /&gt;
The experienced Perl programmer already possesses much of what is needed to build a valuable desktop application.&lt;br /&gt;
&lt;br /&gt;
He may know how to:&lt;br /&gt;
&lt;br /&gt;
* validate and transform data;&lt;br /&gt;
* communicate with databases;&lt;br /&gt;
* consume and publish APIs;&lt;br /&gt;
* process text, images, or scientific data;&lt;br /&gt;
* operate remote services;&lt;br /&gt;
* automate complex workflows;&lt;br /&gt;
* authenticate users;&lt;br /&gt;
* generate reports;&lt;br /&gt;
* maintain compatibility;&lt;br /&gt;
* and diagnose failures in production.&lt;br /&gt;
&lt;br /&gt;
These abilities do not become irrelevant when a graphical interface is added. They become the substance behind the interface.&lt;br /&gt;
&lt;br /&gt;
The desktop is not a repudiation of the server work in which Perl programmers have excelled. It is another point at which that work can be placed into the hands of a user.&lt;br /&gt;
&lt;br /&gt;
A Perl programmer who has spent years building web applications may create a Windows client for one of those applications. A systems programmer may create an administrative console. A scientific programmer may package a model or data-analysis workflow for colleagues who will never use a command line. A collector, historian, translator, accountant, engineer, or small-business owner may need a specialized application which no large software company would consider profitable enough to build.&lt;br /&gt;
&lt;br /&gt;
The weary journeyman need not begin again as though his past experience counted for nothing. He must learn a new portion of the trade, but he brings his existing judgment with him.&lt;br /&gt;
&lt;br /&gt;
He already understands that a network can fail, that data must be validated, that an upgrade can damage a working system, and that a user who reports a problem is not necessarily mistaken. These lessons are harder to acquire than the syntax for creating a button.&lt;br /&gt;
&lt;br /&gt;
Learning wxPerl does not erase the journeyman&#039;s experience. It gives that experience another visible form.&lt;br /&gt;
&lt;br /&gt;
Perl is not the obstacle. Perl is the leverage.&lt;br /&gt;
&lt;br /&gt;
== An invitation to the future apprentice ==&lt;br /&gt;
&lt;br /&gt;
Perl also needs new programmers, and many potential programmers are sitting in front of Windows computers right now.&lt;br /&gt;
&lt;br /&gt;
It is impossible to count all future programmers before they discover the craft. We can, however, observe where ordinary desktop users are. Windows remains the dominant desktop operating-system family in worldwide usage measurements.&amp;lt;ref&amp;gt;[https://gs.statcounter.com/os-market-share/desktop/worldwide StatCounter Global Stats, “Desktop Operating System Market Share Worldwide”]&amp;lt;/ref&amp;gt; It is also overwhelmingly prevalent among the participants in Valve&#039;s Steam hardware survey.&amp;lt;ref&amp;gt;[https://store.steampowered.com/hwsurvey/ Valve, “Steam Hardware &amp;amp;amp; Software Survey”]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Many of these users are playing games, installing modifications, running Discord communities, hosting servers, editing configuration files, experimenting with hardware, or trying to automate some irritating part of their digital lives. These activities are not programming apprenticeships by themselves, but they are often close to the doorway.&lt;br /&gt;
&lt;br /&gt;
A person who asks, “Can I change how this game behaves?” is already asking a programmer&#039;s question.&lt;br /&gt;
&lt;br /&gt;
A person who runs a private game server has begun to encounter networking, configuration, permissions, logs, backups, updates, and failure recovery.&lt;br /&gt;
&lt;br /&gt;
A person who installs a modification has begun to discover dependencies, version compatibility, file layouts, and the difference between a working installation and a broken one.&lt;br /&gt;
&lt;br /&gt;
A person who writes a small script to rename files or process game data has begun to discover that the computer can be instructed rather than merely consumed.&lt;br /&gt;
&lt;br /&gt;
If Perl wishes to recruit another generation, Perl programmers must be willing to meet prospective programmers where they are. That includes Windows.&lt;br /&gt;
&lt;br /&gt;
It is not enough to tell a Windows user that serious programmers eventually abandon his environment. It is better to show him that the computer he already owns can become a workshop; that Strawberry Perl gives him a native Perl environment; that wxPerl can create real graphical applications; and that the same language can later take him into web services, databases, systems work, scientific computing, graphics, automation, and many other fields.&lt;br /&gt;
&lt;br /&gt;
The route into the craft should not require the apprentice first to adopt the operating-system preferences of the master.&lt;br /&gt;
&lt;br /&gt;
A healthy guild does not merely preserve the techniques of its existing members. It invites new apprentices, gives them real work appropriate to their abilities, and allows them to grow into responsibility.&lt;br /&gt;
&lt;br /&gt;
== Why return to the desktop? ==&lt;br /&gt;
&lt;br /&gt;
Perl programmers have long been especially effective behind the scenes.&lt;br /&gt;
&lt;br /&gt;
Perl may collect the data, operate the website, maintain the database, run the scientific model, communicate with an outside service, or generate the report. The ordinary user may benefit from all of this without ever seeing Perl directly.&lt;br /&gt;
&lt;br /&gt;
That is not a defect. Invisible infrastructure is often excellent work.&lt;br /&gt;
&lt;br /&gt;
Nevertheless, the Windows desktop offers another place for the Perl craftsman to practice his trade: directly in front of the person whose work the software is intended to serve.&lt;br /&gt;
&lt;br /&gt;
A desktop application may:&lt;br /&gt;
&lt;br /&gt;
* organize files already stored on the user&#039;s computer;&lt;br /&gt;
* provide a specialized editor or research interface;&lt;br /&gt;
* display data from a remote Perl application;&lt;br /&gt;
* upload images or documents for server-side processing;&lt;br /&gt;
* present results from a database or API;&lt;br /&gt;
* allow local work when the network is unavailable;&lt;br /&gt;
* interact with devices or other applications installed on the computer;&lt;br /&gt;
* or provide a richer companion to an existing website.&lt;br /&gt;
&lt;br /&gt;
A service such as [https://boyscoutpatch.info/ BoyScoutPatch.info], for example, may continue to perform centralized work for which a web application is well suited, while a desktop client could provide a more specialized workflow for collectors, researchers, or administrators.&lt;br /&gt;
&lt;br /&gt;
The desktop application and web application need not compete. Each can perform the work suited to it.&lt;br /&gt;
&lt;br /&gt;
The server may maintain shared data, perform expensive searches, coordinate users, apply centralized business rules, or execute processing which requires resources not available on the user&#039;s machine.&lt;br /&gt;
&lt;br /&gt;
The desktop application may manage local files, provide richer interaction, preserve partially completed work, integrate with the user&#039;s operating system, and continue performing some tasks when the network is unavailable.&lt;br /&gt;
&lt;br /&gt;
This is an application of subsidiarity. The server should perform work which genuinely belongs on the server. The desktop should perform work which is best placed in the user&#039;s hands. Larger systems should support the user, the independent programmer, and the local organization where their resources are genuinely needed, without unnecessarily taking away work and responsibility which can be competently exercised at the more immediate level.&lt;br /&gt;
&lt;br /&gt;
Subsidiarity does not require isolation. It must be joined to solidarity. The individual programmer, the guild, the toolmaker, the server operator, and the user may depend upon one another. The objective is not to abandon the smaller participant, but to strengthen him without absorbing every responsibility into a distant centralized system.&lt;br /&gt;
&lt;br /&gt;
The goal is not to replace every web application with a desktop program. It is to place each responsibility where it can be performed most effectively, while avoiding needless centralization and needless dependence upon a permanent network connection.&lt;br /&gt;
&lt;br /&gt;
== Why Windows? ==&lt;br /&gt;
&lt;br /&gt;
This series deliberately focuses on Windows.&lt;br /&gt;
&lt;br /&gt;
That does not imply that Windows is the only worthy platform, or that wxPerl cannot be useful elsewhere. It means that a craftsman must eventually choose a definite workshop and a definite group of users.&lt;br /&gt;
&lt;br /&gt;
Windows offers several practical advantages for this undertaking.&lt;br /&gt;
&lt;br /&gt;
First, Windows has a very large population of ordinary desktop users. That population includes customers, office workers, researchers, collectors, students, gamers, and prospective programmers.&lt;br /&gt;
&lt;br /&gt;
Second, specialized commercial desktop software is familiar on Windows. Users understand the idea of downloading an application, running an installer, finding the program in the Start menu, and paying for a tool which performs useful work.&lt;br /&gt;
&lt;br /&gt;
Third, Windows has an unusually strong culture of backward application compatibility. Microsoft describes application compatibility as an intentional design concern and recognizes that developers and customers expect applications in which they have invested to continue working.&amp;lt;ref&amp;gt;[https://learn.microsoft.com/en-us/windows/compatibility/key-changes-since-windows-7-to-ensure-compatibility Microsoft Learn, “Key changes since Windows 7 to ensure compatibility”]&amp;lt;/ref&amp;gt; Microsoft has also stated that it goes to great lengths to preserve application and device compatibility when operating-system versions change.&amp;lt;ref&amp;gt;[https://learn.microsoft.com/en-us/windows/compatibility/windows-version-check Microsoft Learn, “Windows version check”]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Windows application manifests can even allow newer versions of the operating system to provide behaviors expected by software targeting earlier releases.&amp;lt;ref&amp;gt;[https://learn.microsoft.com/en-us/windows/compatibility/application-executable-manifest Microsoft Learn, “App executable manifest”]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No compatibility promise is absolute. Security changes, removed components, architecture changes, obsolete drivers, unavailable libraries, and undocumented assumptions can still break old programs. Nevertheless, Windows demonstrates an unusually strong expectation that software written for an earlier generation should continue to function.&lt;br /&gt;
&lt;br /&gt;
At times, Windows&#039; compatibility expectations appear even more extreme than Perl&#039;s own.&lt;br /&gt;
&lt;br /&gt;
That expectation matters to the independent craftsman.&lt;br /&gt;
&lt;br /&gt;
A specialized application may serve a modest community for many years. Its value may come from stability rather than constant reinvention. A program which continues working through several generations of hardware and operating systems can repay its development cost many times over.&lt;br /&gt;
&lt;br /&gt;
The author&#039;s own experiments with ActivePerl 5.8.8 on Windows 98 illustrate the remarkable historical reach of both ecosystems. This does not mean that new commercial software should target Windows 98. It means that the craftsman should recognize the strategic value of technologies which respect existing work.&lt;br /&gt;
&lt;br /&gt;
Fourth, Strawberry Perl provides a serious native Windows Perl environment. It includes Perl, a compiler, build utilities, and access to the CPAN ecosystem. The Windows programmer is not confined to a toy interpreter or an imitation of a Unix system.&lt;br /&gt;
&lt;br /&gt;
Finally, many Perl programmers already use Windows as a daily working environment, and many possible new Perl programmers begin there.&lt;br /&gt;
&lt;br /&gt;
The choice is therefore practical rather than ideological.&lt;br /&gt;
&lt;br /&gt;
The question is not, “Which operating system proves that I am a proper programmer?”&lt;br /&gt;
&lt;br /&gt;
The question is, “Where can existing Perl knowledge be turned into useful software, and where can new craftsmen be invited into the trade?”&lt;br /&gt;
&lt;br /&gt;
== Extreme compatibility creates an opportunity ==&lt;br /&gt;
&lt;br /&gt;
Windows&#039; backward compatibility does more than preserve old software. It encourages a particular kind of small-scale production.&lt;br /&gt;
&lt;br /&gt;
A large vendor may prefer subscriptions, rapid replacement, cloud dependence, forced upgrades, and frequent redesign. An independent craftsman may instead produce a focused application which performs one job well and continues doing it for a long time.&lt;br /&gt;
&lt;br /&gt;
That application might serve only a few hundred users. It might serve a laboratory, a local company, a collecting community, a nonprofit, or a narrow professional field. Its market may be too small for a major software firm but large enough to support the person who understands the problem.&lt;br /&gt;
&lt;br /&gt;
Long-lived desktop software also creates continuing forms of useful labor:&lt;br /&gt;
&lt;br /&gt;
* installation;&lt;br /&gt;
* customization;&lt;br /&gt;
* data conversion;&lt;br /&gt;
* training;&lt;br /&gt;
* compatibility maintenance;&lt;br /&gt;
* support;&lt;br /&gt;
* integration with newer services;&lt;br /&gt;
* and carefully managed upgrades.&lt;br /&gt;
&lt;br /&gt;
Backward compatibility does not eliminate this labor. It gives the labor a durable foundation.&lt;br /&gt;
&lt;br /&gt;
The programmer can improve the application without forcing every user to abandon previous work. The user can invest time learning a tool with some confidence that the tool will not disappear merely because an investor has changed direction or a remote service has been discontinued.&lt;br /&gt;
&lt;br /&gt;
This relationship between craftsman and user is especially important in a guild-minded approach to software. The programmer is not merely attempting to capture attention, collect data, or make cancellation difficult. He is accepting responsibility for an instrument another person may use in his own work.&lt;br /&gt;
&lt;br /&gt;
The user&#039;s investment matters. The user may have spent hours learning the software, entering data, developing procedures, training employees, or creating records which must be preserved. Backward compatibility is therefore not merely a technical convenience. It is a way of respecting labor already performed.&lt;br /&gt;
&lt;br /&gt;
== From a working script to a Windows product ==&lt;br /&gt;
&lt;br /&gt;
A Perl script and a Windows product may contain the same essential program logic, but the user&#039;s experience is very different.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ From the developer&#039;s program to the user&#039;s product&lt;br /&gt;
! The developer may have&lt;br /&gt;
! The Windows user reasonably expects&lt;br /&gt;
|-&lt;br /&gt;
| A &amp;lt;code&amp;gt;.pl&amp;lt;/code&amp;gt; file&lt;br /&gt;
| An application which starts from an icon&lt;br /&gt;
|-&lt;br /&gt;
| Installed CPAN modules&lt;br /&gt;
| No requirement to install Perl or dependencies&lt;br /&gt;
|-&lt;br /&gt;
| Commands entered in a terminal&lt;br /&gt;
| A graphical interface&lt;br /&gt;
|-&lt;br /&gt;
| Paths which work on the development computer&lt;br /&gt;
| Correct installation and user-data directories&lt;br /&gt;
|-&lt;br /&gt;
| Diagnostic output in a console&lt;br /&gt;
| Understandable errors and useful logs&lt;br /&gt;
|-&lt;br /&gt;
| A program which works in the workshop&lt;br /&gt;
| A program which works on the user&#039;s computer&lt;br /&gt;
|-&lt;br /&gt;
| A collection of build commands&lt;br /&gt;
| A repeatable installer and upgrade procedure&lt;br /&gt;
|-&lt;br /&gt;
| Personal knowledge of hidden dependencies&lt;br /&gt;
| A package containing everything the application needs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The difficult question is therefore not merely whether Perl can display a graphical window. It can.&lt;br /&gt;
&lt;br /&gt;
The difficult question is whether we can establish a clear and repeatable path from the Perl programmer&#039;s existing skills to software which an ordinary Windows user can install and use.&lt;br /&gt;
&lt;br /&gt;
That is the purpose of the [[Developing and Distributing wxPerl Applications on Windows|Perl Lazarus Project&#039;s documented Windows workflow]].&lt;br /&gt;
&lt;br /&gt;
== The Perl Lazarus journey ==&lt;br /&gt;
&lt;br /&gt;
[[File:perl-lazarus-project-workflow.png|thumb|right|420px|alt=Six-stage Perl Lazarus Project workflow from installing the development stack through testing the finished Windows application|The Perl Lazarus Project follows a complete path: install the stack, design the GUI, write the Perl code, package the executable, build the installer, and test the result on Windows.]]&lt;br /&gt;
&lt;br /&gt;
The Perl Lazarus Project builds upon the renewed wxPerl work associated with Johan Vromans and others in the wxPerl community.&amp;lt;ref&amp;gt;[https://dev.to/sciurius/wxperl-revival-5fde Johan Vromans, “wxPerl Revival”]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It comes out of the larger work of Perl Guilds: supporting independent Perl programmers who seek to make a living through their trade, preserve practical knowledge, and place powerful tools into the hands of individual craftsmen and smaller communities.&amp;lt;ref&amp;gt;Brett Estrade, “Perl Lazarus Project,” presentation for the Summer 2026 Perl Community Conference, Austin, Texas.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The name points first to Lazarus of the Bible, raised from the dead after four days. It is a fitting image for bringing renewed life to practical GUI development in Perl. The necessary modules and tools were not entirely gone, but the path among them had become difficult to see and difficult to follow.&lt;br /&gt;
&lt;br /&gt;
The name also acknowledges the example of the [https://www.lazarus-ide.org/ Lazarus IDE and Free Pascal community]. Lazarus demonstrates what can happen when a programming community joins a language, a visual designer, component libraries, documentation, packaging practices, examples, books, support, consulting, and application development.&lt;br /&gt;
&lt;br /&gt;
The deeper inspiration is not merely the interface of an integrated development environment. It is the presence of a complete culture of application production.&lt;br /&gt;
&lt;br /&gt;
Perl does not necessarily need a single enormous Lazarus-like IDE. It needs a clear path which craftsmen can follow:&lt;br /&gt;
&lt;br /&gt;
# Install a known working development stack.&lt;br /&gt;
# Design the interface.&lt;br /&gt;
# Generate and write Perl code.&lt;br /&gt;
# Package the application as an executable.&lt;br /&gt;
# Build a Windows installer.&lt;br /&gt;
# Test the installed program on a clean Windows system.&lt;br /&gt;
&lt;br /&gt;
The significance of this path is not that any individual step is unknown. Perl already has a native Windows distribution, graphical bindings, interface-design tools, packaging modules, and installer technology. The missing element has been a coherent and repeatable journey connecting them.&lt;br /&gt;
&lt;br /&gt;
The present stack joins Strawberry Perl, wxWidgets, wxPerl, wxGlade, PAR-based packaging tools, and Inno Setup. The next essay, [[The Perl Lazarus Workshop]], will explain why these tools belong together and what role each one performs in the craftsman&#039;s workshop.&lt;br /&gt;
&lt;br /&gt;
The series will then proceed through installation, visual design, the wxGlade-to-Perl development cycle, application structure, local data, communication with Perl web services, executable creation, installer construction, testing, support, and the possibility of earning a livable wage through useful applications.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:nhc-advisory-explorer-windows.png|thumb|left|380px|alt=NHC Advisory Explorer running as a packaged Windows desktop application|The NHC Advisory Explorer demonstrates the practical result: a wxPerl program packaged for ordinary Windows users.]]&lt;br /&gt;
&lt;br /&gt;
This is not merely a theoretical possibility. The [https://github.com/StormSurgeLive/nhc-advisory-gui NHC Advisory Explorer] is one example of a wxPerl program packaged for Windows users.&amp;lt;ref&amp;gt;[https://github.com/StormSurgeLive/nhc-advisory-gui StormSurgeLive, “NHC Advisory Explorer”]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The program retrieves and presents National Hurricane Center advisory information through a familiar desktop interface. More importantly for this series, it demonstrates that the complete path can be followed: a Perl application can be given a graphical interface, packaged as a Windows executable, placed into an installer, and distributed to users who do not need to install Perl or understand the application&#039;s dependencies.&lt;br /&gt;
&lt;br /&gt;
That final point is essential.&lt;br /&gt;
&lt;br /&gt;
The Perl programmer may know that the application depends upon Strawberry Perl, wxPerl, wxWidgets, CPAN modules, native DLLs, and packaging tools. The user should ordinarily experience only a Windows application which installs and runs in the expected way.&lt;br /&gt;
&lt;br /&gt;
The language remains the craftsman&#039;s advantage. It does not need to become the customer&#039;s burden.&lt;br /&gt;
&lt;br /&gt;
Readers who want to examine earlier tools and historical attempts at wxWidgets rapid application development in Perl may also consult [[Perl and wxWidgets RAD on Windows]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== The craft and the virtue ==&lt;br /&gt;
&lt;br /&gt;
The virtues themselves are discussed elsewhere in the [[Portal:Essays about The Virtuous Perl Programmer|Virtuous Perl Programmer]] material. Here our concern is how they direct the work at hand.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Practical wisdom, or prudence, not laziness&#039;&#039;&#039; asks the craftsman to identify a genuine human good and choose fitting means of attaining it.&lt;br /&gt;
&lt;br /&gt;
For the weary journeyman or master, prudence may require learning a new part of the trade rather than endlessly repeating familiar server-side work. Existing Perl experience is not discarded. It is redirected and extended.&lt;br /&gt;
&lt;br /&gt;
For the apprentice, prudence means refusing the temptation to skip directly to a polished commercial product without first learning the underlying tools and workflow.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
“Wherefore I wished, and understanding was given me: and I called upon God, and the spirit of wisdom came upon me.”&lt;br /&gt;
&amp;lt;br /&amp;gt;— Wisdom 7:7, Douay-Rheims&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Automation does not eliminate the importance of labor, but neither is human labor the first cause of creation or goodness.&lt;br /&gt;
&lt;br /&gt;
God alone is Creator in the proper sense. The earth and its materials, the natural order, the human person, reason, imagination, skill, time, opportunity, and the capacity to work are gifts from Him. Human beings create none of these things from nothing.&lt;br /&gt;
&lt;br /&gt;
Within that created order, however, the earthly goods which human society cultivates, fashions, organizes, preserves, repairs, and exchanges depend upon human labor acting upon gifts received from God. Labor adds form, usefulness, knowledge, order, accessibility, and service to what has been given.&lt;br /&gt;
&lt;br /&gt;
The programmer&#039;s abilities are therefore neither meaningless accidents nor entirely self-made possessions. They are talents entrusted to him. He has a duty to develop them, use them honestly, and direct them toward good purposes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
“Every best gift, and every perfect gift, is from above, coming down from the Father of lights.”&lt;br /&gt;
&amp;lt;br /&amp;gt;— James 1:17, Douay-Rheims&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A tool preserves earlier labor and allows new labor to be applied more effectively, but the tool does not give itself a worthy purpose. It does not recognize the user&#039;s dignity, determine what justice requires, accept responsibility for an error, repent of deception, or choose to serve the common good.&lt;br /&gt;
&lt;br /&gt;
A compiler contains the accumulated labor of its authors and maintainers.&lt;br /&gt;
&lt;br /&gt;
A GUI designer preserves knowledge about widgets, layouts, serialization, and code generation.&lt;br /&gt;
&lt;br /&gt;
A Perl module contains work which another programmer has made reusable.&lt;br /&gt;
&lt;br /&gt;
An installer builder embodies years of experience with Windows installation, upgrades, shortcuts, permissions, and uninstallation.&lt;br /&gt;
&lt;br /&gt;
A body of documentation preserves the labor of those who discovered, tested, explained, and corrected the workflow before us.&lt;br /&gt;
&lt;br /&gt;
The virtuous programmer receives all of this with gratitude. He gives thanks first to God, from whom every talent and every good ultimately comes. He also gives human creators what is due to them: attribution, obedience to licenses, payment when reasonably requested, helpful correction, support, and respect for their work.&lt;br /&gt;
&lt;br /&gt;
The programmer who hopes to receive just compensation for his own labor should respect the labor which makes his work possible.&lt;br /&gt;
&lt;br /&gt;
The same order applies to artificial intelligence.&lt;br /&gt;
&lt;br /&gt;
An AI system is a tool produced through human labor and trained through the use of humanly created materials, technical infrastructure, and natural resources. It is not a person, a craftsman, a moral agent, or the source of wisdom. It does not possess the dignity of the apprentice whose work it may assist, nor does it assume the responsibility of the master who chooses to employ it.&lt;br /&gt;
&lt;br /&gt;
AI may help the programmer produce a first draft of a wxGlade XML file, suggest Perl code, identify an error, or explain an unfamiliar API. The human programmer must still judge the purpose, verify the output, respect the rights and labor of others, protect the user, and accept responsibility for the finished application.&lt;br /&gt;
&lt;br /&gt;
The tool may assist the craftsman. It cannot replace the craftsman&#039;s moral agency.&lt;br /&gt;
&lt;br /&gt;
The aim of the virtuous programmer is therefore not to avoid work. It is to avoid wasting work.&lt;br /&gt;
&lt;br /&gt;
A repeatable installation procedure preserves labor.&lt;br /&gt;
&lt;br /&gt;
A visual GUI builder reduces unnecessary mechanical effort.&lt;br /&gt;
&lt;br /&gt;
Reusable Perl modules preserve tested knowledge.&lt;br /&gt;
&lt;br /&gt;
An installer saves every user from recreating the developer&#039;s environment.&lt;br /&gt;
&lt;br /&gt;
Backward compatibility protects work already performed by programmers and users.&lt;br /&gt;
&lt;br /&gt;
Good tools allow the craftsman to direct more effort toward understanding the user and completing the work.&lt;br /&gt;
&lt;br /&gt;
The purpose of this series is therefore larger than the recovery of a neglected technical workflow. A craft forms the craftsman. The habits by which we design, build, test, sell, and support software shape the kind of people we become.&lt;br /&gt;
&lt;br /&gt;
A programmer who learns to see users as persons rather than abstractions, to give fellow workers their due, to admit error, to keep promises, to restrain ambition, and to place skill at the service of genuine human needs is learning more than application development.&lt;br /&gt;
&lt;br /&gt;
Technical mastery is good, but it is not the highest good.&lt;br /&gt;
&lt;br /&gt;
Profit can be good when it sustains useful work, supports a family, allows continued maintenance, and makes service possible. It becomes disordered when users, workers, customers, or communities are treated merely as instruments for obtaining it.&lt;br /&gt;
&lt;br /&gt;
Likewise, open-source and freely available tools are good, but their availability does not mean that no human labor stands behind them. A sustainable guild economy depends upon mutual recognition: craftsmen receive tools, instruction, examples, testing, and support from others, and they contribute labor, knowledge, payment, encouragement, or maintenance in return.&lt;br /&gt;
&lt;br /&gt;
Good craftsmanship joins competence with justice.&lt;br /&gt;
&lt;br /&gt;
The craft reaches its proper earthly end when knowledge, tools, talents, and labor are received with gratitude and ordered toward truthful service of persons, families, and communities.&lt;br /&gt;
&lt;br /&gt;
Its final measure is not technical mastery, money, reputation, or even the survival of a particular programming language. The craftsman must ask whether he has used the gifts entrusted to him faithfully, treated others justly, served genuine human needs, and returned good fruit from the talents he received.&lt;br /&gt;
&lt;br /&gt;
== At the workbench: propose a masterwork ==&lt;br /&gt;
&lt;br /&gt;
Before installing anything, describe one possible application.&lt;br /&gt;
&lt;br /&gt;
Write down:&lt;br /&gt;
&lt;br /&gt;
# Who will use it?&lt;br /&gt;
# What work are they doing now?&lt;br /&gt;
# What burden, error, or unmet need does the application address?&lt;br /&gt;
# What part of that work belongs on the desktop?&lt;br /&gt;
# What part, if any, belongs on a Perl-powered server?&lt;br /&gt;
# What files or data will the user provide?&lt;br /&gt;
# What result will the application produce?&lt;br /&gt;
# What is the smallest version which would be genuinely useful?&lt;br /&gt;
# Why would someone install it?&lt;br /&gt;
# Why might someone reasonably pay for it?&lt;br /&gt;
# What continuing responsibility will you accept after delivering it?&lt;br /&gt;
# How will the application respect the user&#039;s data and previous labor?&lt;br /&gt;
# Could an apprentice learn something useful by helping with it?&lt;br /&gt;
# Could the application remain useful for five or ten years?&lt;br /&gt;
# Would the price, support arrangement, or business model allow the programmer to continue serving its users without harming his family or neglecting other obligations?&lt;br /&gt;
# What talents, opportunities, inherited knowledge, and tools has God entrusted to you for this work, and how will you use them faithfully?&lt;br /&gt;
&lt;br /&gt;
The proposal need not describe a large product.&lt;br /&gt;
&lt;br /&gt;
A narrow tool completed well is a better masterwork than an ambitious system which never leaves the developer&#039;s computer.&lt;br /&gt;
&lt;br /&gt;
The first project might be:&lt;br /&gt;
&lt;br /&gt;
* a specialized file converter;&lt;br /&gt;
* a research tool;&lt;br /&gt;
* a desktop client for an existing Perl web application;&lt;br /&gt;
* a database front end;&lt;br /&gt;
* an image-processing utility;&lt;br /&gt;
* a scientific data viewer;&lt;br /&gt;
* an administrative console;&lt;br /&gt;
* a report generator;&lt;br /&gt;
* a collecting application;&lt;br /&gt;
* or a tool created for one profession, organization, or community.&lt;br /&gt;
&lt;br /&gt;
The value of a project does not depend upon millions of users. A tool may create substantial value by serving a small number of people whose work is important and whose needs are poorly understood by larger software vendors.&lt;br /&gt;
&lt;br /&gt;
The craftsman should begin close to the problem.&lt;br /&gt;
&lt;br /&gt;
Talk to the prospective user. Observe the existing work. Learn the vocabulary. Ask where mistakes occur, what consumes time, what information must be preserved, and what happens when the current process fails.&lt;br /&gt;
&lt;br /&gt;
The application should emerge from service to a real need, not from the desire to display technical cleverness.&lt;br /&gt;
&lt;br /&gt;
== Continue the journey ==&lt;br /&gt;
&lt;br /&gt;
The next essay, [[The Perl Lazarus Workshop]], examines the tools selected for this work: Strawberry Perl, wxWidgets, wxPerl, wxGlade, MSYS2, PAR-based packaging, and Inno Setup.&lt;br /&gt;
&lt;br /&gt;
The purpose will not be to present a random collection of software. It will be to understand how each tool contributes to one coherent craftsman&#039;s workshop, how the labor embodied in those tools makes new work possible, and why the chosen stack provides a practical route from Perl knowledge to a complete Windows application.&lt;br /&gt;
&lt;br /&gt;
The third essay, [[Raising a Working wxPerl Shop on Windows]], will then move from explanation to practice: installing the development environment, verifying wxPerl, adding wxGlade, establishing an efficient MSYS2 and vim workflow, generating Perl code, wiring an event, running the program under Strawberry Perl, and preserving the result in Git.&lt;br /&gt;
&lt;br /&gt;
The journey begins with an existing trade, a real human need, gifts received from God, and the decision to bring useful work to completion.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Perl Craftsman Returns to the Windows Desktop}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Series:&#039;&#039;&#039; [[Portal:Essays about The Virtuous Perl Programmer|Essays about The Virtuous Perl Programmer]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Next essay:&#039;&#039;&#039; [[The Perl Lazarus Workshop]]&lt;br /&gt;
&lt;br /&gt;
[[Category:The Virtuous Perl Programmer]]&lt;br /&gt;
[[Category:Perl Lazarus Project]]&lt;br /&gt;
[[Category:wxPerl]]&lt;br /&gt;
[[Category:Perl Guilds]]&lt;br /&gt;
[[Category:Windows]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=The_Perl_Craftsman_Returns_to_the_Windows_Desktop&amp;diff=373</id>
		<title>The Perl Craftsman Returns to the Windows Desktop</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=The_Perl_Craftsman_Returns_to_the_Windows_Desktop&amp;diff=373"/>
		<updated>2026-07-19T21:19:44Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:The Perl Craftsman Returns to the Windows Desktop}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This is the first essay in the series [[Portal:Essays about The Virtuous Perl Programmer|Essays about The Virtuous Perl Programmer]]. The series follows the practical journey from Perl programmer to craftsman of complete, distributable Windows applications.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
There comes a point in the life of a programmer when experience can become strangely tiring.&lt;br /&gt;
&lt;br /&gt;
The journeyman Perl programmer may have crossed many territories. He has repaired old systems, migrated databases, parsed uncooperative data, automated jobs, maintained web applications, connected APIs, managed servers, and rescued programs whose original authors disappeared years ago. He may have spent decades learning that the apparently simple problem is rarely simple, that data supplied by users never quite resembles the example, and that the machine which fails is usually not the machine on which the software was developed.&lt;br /&gt;
&lt;br /&gt;
The master Perl programmer may have done all of this while teaching others, supporting clients, maintaining community infrastructure, and carrying responsibility for systems which cannot simply be turned off and rewritten in the fashionable language of the year.&lt;br /&gt;
&lt;br /&gt;
Such a programmer is not obsolete. He may only be weary.&lt;br /&gt;
&lt;br /&gt;
The repeated announcement of Perl&#039;s death can become tiresome. So can working continually behind the scenes while newer communities rediscover techniques that Perl programmers have practiced for decades. The experienced Perl programmer may understandably ask whether there is any new territory worth crossing, or whether his remaining work consists only of maintaining what other people have abandoned.&lt;br /&gt;
&lt;br /&gt;
At the same time, a newer programmer may sit in front of a Windows computer and never encounter Perl at all. He may know that programs come from an application store, a game launcher, a download page, or a Git repository, but not yet understand that he can create those programs himself. He may be experimenting with game modifications, running a private server, editing configuration files, automating a repetitive task, or wondering how a favorite program works.&lt;br /&gt;
&lt;br /&gt;
He may, quite literally, be playing video games.&lt;br /&gt;
&lt;br /&gt;
Playing a game is not a lesser or shameful use of a computer. Recreation has its proper place. Yet games often place young people near modding, scripting, servers, digital art, online communities, hardware, configuration files, and technical curiosity. These can become entrances into a genuine craft.&lt;br /&gt;
&lt;br /&gt;
Some future Perl programmer is probably using a Windows computer right now without knowing that Perl exists.&lt;br /&gt;
&lt;br /&gt;
This series is addressed to both: the experienced craftsman who may need a new application for an old and powerful trade, and the prospective apprentice who has not yet discovered that programming can become his own craft.&lt;br /&gt;
&lt;br /&gt;
== The programmer as craftsman ==&lt;br /&gt;
&lt;br /&gt;
The language of the craftsman is useful because programming is not merely the manipulation of symbols. It is the application of knowledge, judgment, practiced skill, and responsibility to a human need.&lt;br /&gt;
&lt;br /&gt;
Work is ordered toward the good of persons. The programmer does not exist for the software, the company, or the market. Software, companies, and markets exist to serve human life and human communities. A technically impressive application which deceives its customers, degrades its workers, burdens its users, or treats persons merely as sources of data and revenue cannot be considered excellent craftsmanship.&lt;br /&gt;
&lt;br /&gt;
The traditional progression from apprentice to journeyman to master should not be treated as a rigid credentialing system or as an excuse for excluding newcomers. It is a way of describing growth within a trade.&lt;br /&gt;
&lt;br /&gt;
* The &#039;&#039;&#039;apprentice&#039;&#039;&#039; learns the tools, vocabulary, habits, and established practices of the craft.&lt;br /&gt;
* The &#039;&#039;&#039;journeyman&#039;&#039;&#039; can travel beyond the workshop in which he first learned and apply his skills to unfamiliar problems.&lt;br /&gt;
* The &#039;&#039;&#039;master&#039;&#039;&#039; accepts responsibility for complete work, judges its quality, serves customers, preserves knowledge, and helps form other craftsmen.&lt;br /&gt;
&lt;br /&gt;
These names describe differences in skill, experience, and responsibility. They do not describe differences in human worth. The apprentice, journeyman, master, customer, and user possess the same inherent dignity. Greater mastery creates greater obligations of honesty, patience, justice, service, and care. It does not make one person more valuable than another.&lt;br /&gt;
&lt;br /&gt;
A journeyman is not merely someone who has memorized more syntax than an apprentice. He has learned how to proceed when the documentation is incomplete, the operating environment is unfamiliar, and the first solution does not work.&lt;br /&gt;
&lt;br /&gt;
A master is not someone who has stopped learning. He is someone whose experience has taught him the weight of a promise. When he says that a program can be installed, can preserve a user&#039;s data, or can be supported in a particular environment, he understands that another person&#039;s work may depend upon that claim.&lt;br /&gt;
&lt;br /&gt;
A master should also understand that knowledge is not diminished when it is handed on. The formation of an apprentice does not create a competitor who has stolen part of the master&#039;s trade. It strengthens the craft, preserves accumulated experience, and prepares another person to perform useful work.&lt;br /&gt;
&lt;br /&gt;
A masterwork is therefore not merely a clever algorithm, an ingenious regular expression, or an impressive piece of code. It is work brought to completion.&lt;br /&gt;
&lt;br /&gt;
For a Windows desktop application, that completion may include:&lt;br /&gt;
&lt;br /&gt;
* a useful and understandable graphical interface;&lt;br /&gt;
* dependable handling of files and data;&lt;br /&gt;
* communication with an existing Perl web service;&lt;br /&gt;
* a Windows executable;&lt;br /&gt;
* a familiar installer;&lt;br /&gt;
* useful documentation;&lt;br /&gt;
* testing on a computer other than the developer&#039;s;&lt;br /&gt;
* a reasonable upgrade and uninstallation path;&lt;br /&gt;
* and a plan for supporting the people who use it.&lt;br /&gt;
&lt;br /&gt;
The purpose of [[Main Page|Perl Guilds]] is to encourage this fuller understanding of the programmer&#039;s trade: independent programmers sharing knowledge, cultivating practical specialties, forming one another in the craft, and helping one another earn a living through useful work.&lt;br /&gt;
&lt;br /&gt;
== An invitation to the weary journeyman ==&lt;br /&gt;
&lt;br /&gt;
The experienced Perl programmer already possesses much of what is needed to build a valuable desktop application.&lt;br /&gt;
&lt;br /&gt;
He may know how to:&lt;br /&gt;
&lt;br /&gt;
* validate and transform data;&lt;br /&gt;
* communicate with databases;&lt;br /&gt;
* consume and publish APIs;&lt;br /&gt;
* process text, images, or scientific data;&lt;br /&gt;
* operate remote services;&lt;br /&gt;
* automate complex workflows;&lt;br /&gt;
* authenticate users;&lt;br /&gt;
* generate reports;&lt;br /&gt;
* maintain compatibility;&lt;br /&gt;
* and diagnose failures in production.&lt;br /&gt;
&lt;br /&gt;
These abilities do not become irrelevant when a graphical interface is added. They become the substance behind the interface.&lt;br /&gt;
&lt;br /&gt;
The desktop is not a repudiation of the server work in which Perl programmers have excelled. It is another point at which that work can be placed into the hands of a user.&lt;br /&gt;
&lt;br /&gt;
A Perl programmer who has spent years building web applications may create a Windows client for one of those applications. A systems programmer may create an administrative console. A scientific programmer may package a model or data-analysis workflow for colleagues who will never use a command line. A collector, historian, translator, accountant, engineer, or small-business owner may need a specialized application which no large software company would consider profitable enough to build.&lt;br /&gt;
&lt;br /&gt;
The weary journeyman need not begin again as though his past experience counted for nothing. He must learn a new portion of the trade, but he brings his existing judgment with him.&lt;br /&gt;
&lt;br /&gt;
He already understands that a network can fail, that data must be validated, that an upgrade can damage a working system, and that a user who reports a problem is not necessarily mistaken. These lessons are harder to acquire than the syntax for creating a button.&lt;br /&gt;
&lt;br /&gt;
Learning wxPerl does not erase the journeyman&#039;s experience. It gives that experience another visible form.&lt;br /&gt;
&lt;br /&gt;
Perl is not the obstacle. Perl is the leverage.&lt;br /&gt;
&lt;br /&gt;
== An invitation to the future apprentice ==&lt;br /&gt;
&lt;br /&gt;
Perl also needs new programmers, and many potential programmers are sitting in front of Windows computers right now.&lt;br /&gt;
&lt;br /&gt;
It is impossible to count all future programmers before they discover the craft. We can, however, observe where ordinary desktop users are. Windows remains the dominant desktop operating-system family in worldwide usage measurements.&amp;lt;ref&amp;gt;[https://gs.statcounter.com/os-market-share/desktop/worldwide StatCounter Global Stats, “Desktop Operating System Market Share Worldwide”]&amp;lt;/ref&amp;gt; It is also overwhelmingly prevalent among the participants in Valve&#039;s Steam hardware survey.&amp;lt;ref&amp;gt;[https://store.steampowered.com/hwsurvey/ Valve, “Steam Hardware &amp;amp;amp; Software Survey”]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Many of these users are playing games, installing modifications, running Discord communities, hosting servers, editing configuration files, experimenting with hardware, or trying to automate some irritating part of their digital lives. These activities are not programming apprenticeships by themselves, but they are often close to the doorway.&lt;br /&gt;
&lt;br /&gt;
A person who asks, “Can I change how this game behaves?” is already asking a programmer&#039;s question.&lt;br /&gt;
&lt;br /&gt;
A person who runs a private game server has begun to encounter networking, configuration, permissions, logs, backups, updates, and failure recovery.&lt;br /&gt;
&lt;br /&gt;
A person who installs a mod has begun to discover dependencies, version compatibility, file layouts, and the difference between a working installation and a broken one.&lt;br /&gt;
&lt;br /&gt;
A person who writes a small script to rename files or process game data has begun to discover that the computer can be instructed rather than merely consumed.&lt;br /&gt;
&lt;br /&gt;
If Perl wishes to recruit another generation, Perl programmers must be willing to meet prospective programmers where they are. That includes Windows.&lt;br /&gt;
&lt;br /&gt;
It is not enough to tell a Windows user that serious programmers eventually abandon his environment. It is better to show him that the computer he already owns can become a workshop; that Strawberry Perl gives him a native Perl environment; that wxPerl can create real graphical applications; and that the same language can later take him into web services, databases, systems work, scientific computing, graphics, automation, and many other fields.&lt;br /&gt;
&lt;br /&gt;
The route into the craft should not require the apprentice first to adopt the operating-system preferences of the master.&lt;br /&gt;
&lt;br /&gt;
A healthy guild does not merely preserve the techniques of its existing members. It invites new apprentices, gives them real work appropriate to their abilities, and allows them to grow into responsibility.&lt;br /&gt;
&lt;br /&gt;
== Why return to the desktop? ==&lt;br /&gt;
&lt;br /&gt;
Perl programmers have long been especially effective behind the scenes.&lt;br /&gt;
&lt;br /&gt;
Perl may collect the data, operate the website, maintain the database, run the scientific model, communicate with an outside service, or generate the report. The ordinary user may benefit from all of this without ever seeing Perl directly.&lt;br /&gt;
&lt;br /&gt;
That is not a defect. Invisible infrastructure is often excellent work.&lt;br /&gt;
&lt;br /&gt;
Nevertheless, the Windows desktop offers another place for the Perl craftsman to practice his trade: directly in front of the person whose work the software is intended to serve.&lt;br /&gt;
&lt;br /&gt;
A desktop application may:&lt;br /&gt;
&lt;br /&gt;
* organize files already stored on the user&#039;s computer;&lt;br /&gt;
* provide a specialized editor or research interface;&lt;br /&gt;
* display data from a remote Perl application;&lt;br /&gt;
* upload images or documents for server-side processing;&lt;br /&gt;
* present results from a database or API;&lt;br /&gt;
* allow local work when the network is unavailable;&lt;br /&gt;
* interact with devices or other applications installed on the computer;&lt;br /&gt;
* or provide a richer companion to an existing website.&lt;br /&gt;
&lt;br /&gt;
A service such as [https://boyscoutpatch.info/ BoyScoutPatch.info], for example, may continue to perform centralized work for which a web application is well suited, while a desktop client could provide a more specialized workflow for collectors, researchers, or administrators.&lt;br /&gt;
&lt;br /&gt;
The desktop application and web application need not compete. Each can perform the work suited to it.&lt;br /&gt;
&lt;br /&gt;
The server may maintain shared data, perform expensive searches, coordinate users, apply centralized business rules, or execute processing which requires resources not available on the user&#039;s machine.&lt;br /&gt;
&lt;br /&gt;
The desktop application may manage local files, provide richer interaction, preserve partially completed work, integrate with the user&#039;s operating system, and continue performing some tasks when the network is unavailable.&lt;br /&gt;
&lt;br /&gt;
This is an application of subsidiarity. The server should perform work which genuinely belongs on the server. The desktop should perform work which is best placed in the user&#039;s hands. Larger systems should support the user, the independent programmer, and the local organization where their resources are genuinely needed, without unnecessarily taking away work and responsibility which can be competently exercised at the more immediate level.&lt;br /&gt;
&lt;br /&gt;
Subsidiarity does not require isolation. It must be joined to solidarity. The individual programmer, the guild, the toolmaker, the server operator, and the user may depend upon one another. The objective is not to abandon the smaller participant, but to strengthen him without absorbing every responsibility into a distant centralized system.&lt;br /&gt;
&lt;br /&gt;
The goal is not to replace every web application with a desktop program. It is to place each responsibility where it can be performed most effectively, while avoiding needless centralization and needless dependence upon a permanent network connection.&lt;br /&gt;
&lt;br /&gt;
== Why Windows? ==&lt;br /&gt;
&lt;br /&gt;
This series deliberately focuses on Windows.&lt;br /&gt;
&lt;br /&gt;
That does not imply that Windows is the only worthy platform, or that wxPerl cannot be useful elsewhere. It means that a craftsman must eventually choose a definite workshop and a definite group of users.&lt;br /&gt;
&lt;br /&gt;
Windows offers several practical advantages for this undertaking.&lt;br /&gt;
&lt;br /&gt;
First, Windows has a very large population of ordinary desktop users. That population includes customers, office workers, researchers, collectors, students, gamers, and prospective programmers.&lt;br /&gt;
&lt;br /&gt;
Second, specialized commercial desktop software is familiar on Windows. Users understand the idea of downloading an application, running an installer, finding the program in the Start menu, and paying for a tool which performs useful work.&lt;br /&gt;
&lt;br /&gt;
Third, Windows has an unusually strong culture of backward application compatibility. Microsoft describes application compatibility as an intentional design concern and states that developers and customers expect applications they have invested in to continue working.&amp;lt;ref&amp;gt;[https://learn.microsoft.com/en-us/windows/compatibility/key-changes-since-windows-7-to-ensure-compatibility Microsoft Learn, “Key changes since Windows 7 to ensure compatibility”]&amp;lt;/ref&amp;gt; Microsoft has also stated that it goes to great lengths to preserve application and device compatibility when operating-system versions change.&amp;lt;ref&amp;gt;[https://learn.microsoft.com/en-us/windows/compatibility/windows-version-check Microsoft Learn, “Windows version check”]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Windows application manifests can even allow newer versions of the operating system to provide behaviors expected by software targeting earlier releases.&amp;lt;ref&amp;gt;[https://learn.microsoft.com/en-us/windows/compatibility/application-executable-manifest Microsoft Learn, “App executable manifest”]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No compatibility promise is absolute. Security changes, removed components, architecture changes, obsolete drivers, unavailable libraries, and undocumented assumptions can still break old programs. Nevertheless, Windows demonstrates an unusually strong expectation that software written for an earlier generation should continue to function.&lt;br /&gt;
&lt;br /&gt;
At times, Windows&#039; compatibility expectations appear even more extreme than Perl&#039;s own.&lt;br /&gt;
&lt;br /&gt;
That expectation matters to the independent craftsman.&lt;br /&gt;
&lt;br /&gt;
A specialized application may serve a modest community for many years. Its value may come from stability rather than constant reinvention. A program which continues working through several generations of hardware and operating systems can repay its development cost many times over.&lt;br /&gt;
&lt;br /&gt;
The author&#039;s own experiments with ActivePerl 5.8.8 on Windows 98 illustrate the remarkable historical reach of both ecosystems. This does not mean that new commercial software should target Windows 98. It means that the craftsman should recognize the strategic value of technologies which respect existing work.&lt;br /&gt;
&lt;br /&gt;
Fourth, Strawberry Perl provides a serious native Windows Perl environment. It includes Perl, a compiler, build utilities, and access to the CPAN ecosystem. The Windows programmer is not confined to a toy interpreter or an imitation of a Unix system.&lt;br /&gt;
&lt;br /&gt;
Finally, many Perl programmers already use Windows as a daily working environment, and many possible new Perl programmers begin there.&lt;br /&gt;
&lt;br /&gt;
The choice is therefore practical rather than ideological.&lt;br /&gt;
&lt;br /&gt;
The question is not, “Which operating system proves that I am a proper programmer?”&lt;br /&gt;
&lt;br /&gt;
The question is, “Where can existing Perl knowledge be turned into useful software, and where can new craftsmen be invited into the trade?”&lt;br /&gt;
&lt;br /&gt;
== Extreme compatibility creates an opportunity ==&lt;br /&gt;
&lt;br /&gt;
Windows&#039; backward compatibility does more than preserve old software. It encourages a particular kind of small-scale production.&lt;br /&gt;
&lt;br /&gt;
A large vendor may prefer subscriptions, rapid replacement, cloud dependence, forced upgrades, and frequent redesign. An independent craftsman may instead produce a focused application which performs one job well and continues doing it for a long time.&lt;br /&gt;
&lt;br /&gt;
That application might serve only a few hundred users. It might serve a laboratory, a local company, a collecting community, a nonprofit, or a narrow professional field. Its market may be too small for a major software firm but large enough to support the person who understands the problem.&lt;br /&gt;
&lt;br /&gt;
Long-lived desktop software also creates continuing forms of useful labor:&lt;br /&gt;
&lt;br /&gt;
* installation;&lt;br /&gt;
* customization;&lt;br /&gt;
* data conversion;&lt;br /&gt;
* training;&lt;br /&gt;
* compatibility maintenance;&lt;br /&gt;
* support;&lt;br /&gt;
* integration with newer services;&lt;br /&gt;
* and carefully managed upgrades.&lt;br /&gt;
&lt;br /&gt;
Backward compatibility does not eliminate this labor. It gives the labor a durable foundation.&lt;br /&gt;
&lt;br /&gt;
The programmer can improve the application without forcing every user to abandon previous work. The user can invest time learning a tool with some confidence that the tool will not disappear merely because an investor has changed direction or a remote service has been discontinued.&lt;br /&gt;
&lt;br /&gt;
This relationship between craftsman and user is especially important in a guild-minded approach to software. The programmer is not merely attempting to capture attention, collect data, or make cancellation difficult. He is accepting responsibility for an instrument another person may use in his own work.&lt;br /&gt;
&lt;br /&gt;
The user&#039;s investment matters. The user may have spent hours learning the software, entering data, developing procedures, training employees, or creating records which must be preserved. Backward compatibility is therefore not merely a technical convenience. It is a way of respecting labor already performed.&lt;br /&gt;
&lt;br /&gt;
== From a working script to a Windows product ==&lt;br /&gt;
&lt;br /&gt;
A Perl script and a Windows product may contain the same essential program logic, but the user&#039;s experience is very different.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ From the developer&#039;s program to the user&#039;s product&lt;br /&gt;
! The developer may have&lt;br /&gt;
! The Windows user reasonably expects&lt;br /&gt;
|-&lt;br /&gt;
| A &amp;lt;code&amp;gt;.pl&amp;lt;/code&amp;gt; file&lt;br /&gt;
| An application which starts from an icon&lt;br /&gt;
|-&lt;br /&gt;
| Installed CPAN modules&lt;br /&gt;
| No requirement to install Perl or dependencies&lt;br /&gt;
|-&lt;br /&gt;
| Commands entered in a terminal&lt;br /&gt;
| A graphical interface&lt;br /&gt;
|-&lt;br /&gt;
| Paths which work on the development computer&lt;br /&gt;
| Correct installation and user-data directories&lt;br /&gt;
|-&lt;br /&gt;
| Diagnostic output in a console&lt;br /&gt;
| Understandable errors and useful logs&lt;br /&gt;
|-&lt;br /&gt;
| A program which works in the workshop&lt;br /&gt;
| A program which works on the user&#039;s computer&lt;br /&gt;
|-&lt;br /&gt;
| A collection of build commands&lt;br /&gt;
| A repeatable installer and upgrade procedure&lt;br /&gt;
|-&lt;br /&gt;
| Personal knowledge of hidden dependencies&lt;br /&gt;
| A package containing everything the application needs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The difficult question is therefore not merely whether Perl can display a graphical window. It can.&lt;br /&gt;
&lt;br /&gt;
The difficult question is whether we can establish a clear and repeatable path from the Perl programmer&#039;s existing skills to software which an ordinary Windows user can install and use.&lt;br /&gt;
&lt;br /&gt;
That is the purpose of the [[Developing and Distributing wxPerl Applications on Windows|Perl Lazarus Project&#039;s documented Windows workflow]].&lt;br /&gt;
&lt;br /&gt;
== The Perl Lazarus journey ==&lt;br /&gt;
&lt;br /&gt;
[[File:perl-lazarus-project-workflow.png|thumb|right|420px|alt=Six-stage Perl Lazarus Project workflow from installing the development stack through testing the finished Windows application|The Perl Lazarus Project follows a complete path: install the stack, design the GUI, write the Perl code, package the executable, build the installer, and test the result on Windows.]]&lt;br /&gt;
&lt;br /&gt;
The Perl Lazarus Project builds upon the renewed wxPerl work associated with Johan Vromans and others in the wxPerl community.&amp;lt;ref&amp;gt;[https://dev.to/sciurius/wxperl-revival-5fde Johan Vromans, “wxPerl Revival”]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It comes out of the larger work of Perl Guilds: supporting independent Perl programmers who seek to make a living through their trade, preserve practical knowledge, and place powerful tools into the hands of individual craftsmen and smaller communities.&amp;lt;ref&amp;gt;Brett Estrade, “Perl Lazarus Project,” presentation prepared for the Summer 2026 Perl Community Conference, Austin, Texas.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The name points first to Lazarus of the Bible, raised from the dead after four days. It is a fitting image for bringing renewed life to practical GUI development in Perl. The necessary modules and tools were not entirely gone, but the path among them had become difficult to see and difficult to follow.&lt;br /&gt;
&lt;br /&gt;
The name also acknowledges the example of the [https://www.lazarus-ide.org/ Lazarus IDE and Free Pascal community]. Lazarus demonstrates what can happen when a programming community joins a language, a visual designer, component libraries, documentation, packaging practices, examples, books, support, consulting, and application development.&lt;br /&gt;
&lt;br /&gt;
The deeper inspiration is not merely the interface of an integrated development environment. It is the presence of a complete culture of application production.&lt;br /&gt;
&lt;br /&gt;
Perl does not necessarily need a single enormous Lazarus-like IDE. It needs a clear path which craftsmen can follow:&lt;br /&gt;
&lt;br /&gt;
# Install a known working development stack.&lt;br /&gt;
# Design the interface.&lt;br /&gt;
# Generate and write Perl code.&lt;br /&gt;
# Package the application as an executable.&lt;br /&gt;
# Build a Windows installer.&lt;br /&gt;
# Test the installed program on a clean Windows system.&lt;br /&gt;
&lt;br /&gt;
The significance of this path is not that any individual step is unknown. Perl already has a native Windows distribution, graphical bindings, interface-design tools, packaging modules, and installer technology. The missing element has been a coherent and repeatable journey connecting them.&lt;br /&gt;
&lt;br /&gt;
The present stack joins Strawberry Perl, wxWidgets, wxPerl, wxGlade, PAR-based packaging tools, and Inno Setup. The next essay, [[The Perl Lazarus Workshop]], will explain why these tools belong together and what role each one performs in the craftsman&#039;s workshop.&lt;br /&gt;
&lt;br /&gt;
The series will then proceed through installation, visual design, the wxGlade-to-Perl development cycle, application structure, local data, communication with Perl web services, executable creation, installer construction, testing, support, and the possibility of earning a livable wage through useful applications.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:nhc-advisory-explorer-windows.png|thumb|left|380px|alt=NHC Advisory Explorer running as a packaged Windows desktop application|The NHC Advisory Explorer demonstrates the practical result: a wxPerl program packaged for ordinary Windows users.]]&lt;br /&gt;
&lt;br /&gt;
This is not merely a theoretical possibility. The [https://github.com/StormSurgeLive/nhc-advisory-gui NHC Advisory Explorer] is one example of a wxPerl program packaged for Windows users.&amp;lt;ref&amp;gt;[https://github.com/StormSurgeLive/nhc-advisory-gui StormSurgeLive, “NHC Advisory Explorer”]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The program retrieves and presents National Hurricane Center advisory information through a familiar desktop interface. More importantly for this series, it demonstrates that the complete path can be followed: a Perl application can be given a graphical interface, packaged as a Windows executable, placed into an installer, and distributed to users who do not need to install Perl or understand the application&#039;s dependencies.&lt;br /&gt;
&lt;br /&gt;
That final point is essential.&lt;br /&gt;
&lt;br /&gt;
The Perl programmer may know that the application depends upon Strawberry Perl, wxPerl, wxWidgets, CPAN modules, native DLLs, and packaging tools. The user should ordinarily experience only a Windows application which installs and runs in the expected way.&lt;br /&gt;
&lt;br /&gt;
The language remains the craftsman&#039;s advantage. It does not need to become the customer&#039;s burden.&lt;br /&gt;
&lt;br /&gt;
Readers who want to examine earlier tools and historical attempts at wxWidgets rapid application development in Perl may also consult [[Perl and wxWidgets RAD on Windows]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== The craft and the virtue ==&lt;br /&gt;
&lt;br /&gt;
The virtues themselves are discussed elsewhere in the [[Portal:Essays about The Virtuous Perl Programmer|Virtuous Perl Programmer]] material. Here our concern is how they direct the work at hand.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Practical wisdom, or prudence, not laziness&#039;&#039;&#039; asks the craftsman to identify a genuine human good and choose fitting means of attaining it.&lt;br /&gt;
&lt;br /&gt;
For the weary journeyman or master, prudence may require learning a new part of the trade rather than endlessly repeating familiar server-side work. Existing Perl experience is not discarded. It is redirected and extended.&lt;br /&gt;
&lt;br /&gt;
For the apprentice, prudence means refusing the temptation to skip directly to a polished commercial product without first learning the underlying tools and workflow.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
“Wherefore I wished, and understanding was given me: and I called upon God, and the spirit of wisdom came upon me.”&lt;br /&gt;
&amp;lt;br /&amp;gt;— Wisdom 7:7, Douay-Rheims&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Automation does not eliminate the importance of labor. All earthly economic value added by human society is created through human labor acting upon the gifts of creation. A tool preserves earlier labor and allows new labor to be applied more effectively, but it does not recognize the user&#039;s need, exercise judgment, accept responsibility, or provide service by itself.&lt;br /&gt;
&lt;br /&gt;
A compiler contains the accumulated labor of its authors and maintainers.&lt;br /&gt;
&lt;br /&gt;
A GUI designer preserves knowledge about widgets, layouts, serialization, and code generation.&lt;br /&gt;
&lt;br /&gt;
A Perl module contains work which another programmer has made reusable.&lt;br /&gt;
&lt;br /&gt;
An installer builder embodies years of experience with Windows installation, upgrades, shortcuts, permissions, and uninstallation.&lt;br /&gt;
&lt;br /&gt;
The virtuous programmer receives this earlier labor with gratitude, learns the terms under which it is offered, and gives its creators what is due to them. When a tool requests a reasonable commercial license, acknowledgment, contribution, or other form of support, the programmer should not ask only what he can legally avoid.&lt;br /&gt;
&lt;br /&gt;
The programmer who hopes to receive just compensation for his own labor should respect the labor which makes his work possible.&lt;br /&gt;
&lt;br /&gt;
The aim of the virtuous programmer is therefore not to avoid work. It is to avoid wasting work.&lt;br /&gt;
&lt;br /&gt;
A repeatable installation procedure preserves labor.&lt;br /&gt;
&lt;br /&gt;
A visual GUI builder reduces unnecessary mechanical effort.&lt;br /&gt;
&lt;br /&gt;
Reusable Perl modules preserve tested knowledge.&lt;br /&gt;
&lt;br /&gt;
An installer saves every user from recreating the developer&#039;s environment.&lt;br /&gt;
&lt;br /&gt;
Backward compatibility protects work already performed by programmers and users.&lt;br /&gt;
&lt;br /&gt;
Good tools allow the craftsman to direct more effort toward understanding the user and completing the work.&lt;br /&gt;
&lt;br /&gt;
The purpose of this series is therefore larger than the recovery of a neglected technical workflow. A craft forms the craftsman. The habits by which we design, build, test, sell, and support software shape the kind of people we become.&lt;br /&gt;
&lt;br /&gt;
A programmer who learns to see users as persons rather than abstractions, to give fellow workers their due, to admit error, to keep promises, to restrain ambition, and to place skill at the service of genuine human needs is learning more than application development.&lt;br /&gt;
&lt;br /&gt;
Technical mastery is good, but it is not the highest good.&lt;br /&gt;
&lt;br /&gt;
Profit can be good when it sustains useful work, supports a family, allows continued maintenance, and makes service possible. It becomes disordered when users, workers, customers, or communities are treated merely as instruments for obtaining it.&lt;br /&gt;
&lt;br /&gt;
Likewise, open-source and freely available tools are good, but their availability does not mean that no human labor stands behind them. A sustainable guild economy depends upon mutual recognition: craftsmen receive tools, instruction, examples, testing, and support from others, and they contribute labor, knowledge, payment, encouragement, or maintenance in return.&lt;br /&gt;
&lt;br /&gt;
Good craftsmanship joins competence with justice.&lt;br /&gt;
&lt;br /&gt;
The craft reaches its proper end when knowledge, tools, and labor are ordered toward truthful service of persons and communities.&lt;br /&gt;
&lt;br /&gt;
== At the workbench: propose a masterwork ==&lt;br /&gt;
&lt;br /&gt;
Before installing anything, describe one possible application.&lt;br /&gt;
&lt;br /&gt;
Write down:&lt;br /&gt;
&lt;br /&gt;
# Who will use it?&lt;br /&gt;
# What work are they doing now?&lt;br /&gt;
# What burden, error, or unmet need does the application address?&lt;br /&gt;
# What part of that work belongs on the desktop?&lt;br /&gt;
# What part, if any, belongs on a Perl-powered server?&lt;br /&gt;
# What files or data will the user provide?&lt;br /&gt;
# What result will the application produce?&lt;br /&gt;
# What is the smallest version which would be genuinely useful?&lt;br /&gt;
# Why would someone install it?&lt;br /&gt;
# Why might someone reasonably pay for it?&lt;br /&gt;
# What continuing responsibility will you accept after delivering it?&lt;br /&gt;
# How will the application respect the user&#039;s data and previous labor?&lt;br /&gt;
# Could an apprentice learn something useful by helping with it?&lt;br /&gt;
# Could the application remain useful for five or ten years?&lt;br /&gt;
# Would the price, support arrangement, or business model allow the programmer to continue serving its users without harming his family or neglecting other obligations?&lt;br /&gt;
&lt;br /&gt;
The proposal need not describe a large product.&lt;br /&gt;
&lt;br /&gt;
A narrow tool completed well is a better masterwork than an ambitious system which never leaves the developer&#039;s computer.&lt;br /&gt;
&lt;br /&gt;
The first project might be:&lt;br /&gt;
&lt;br /&gt;
* a specialized file converter;&lt;br /&gt;
* a research tool;&lt;br /&gt;
* a desktop client for an existing Perl web application;&lt;br /&gt;
* a database front end;&lt;br /&gt;
* an image-processing utility;&lt;br /&gt;
* a scientific data viewer;&lt;br /&gt;
* an administrative console;&lt;br /&gt;
* a report generator;&lt;br /&gt;
* a collecting application;&lt;br /&gt;
* or a tool created for one profession, organization, or community.&lt;br /&gt;
&lt;br /&gt;
The value of a project does not depend upon millions of users. A tool may create substantial value by serving a small number of people whose work is important and whose needs are poorly understood by larger software vendors.&lt;br /&gt;
&lt;br /&gt;
The craftsman should begin close to the problem.&lt;br /&gt;
&lt;br /&gt;
Talk to the prospective user. Observe the existing work. Learn the vocabulary. Ask where mistakes occur, what consumes time, what information must be preserved, and what happens when the current process fails.&lt;br /&gt;
&lt;br /&gt;
The application should emerge from service to a real need, not from the desire to display technical cleverness.&lt;br /&gt;
&lt;br /&gt;
== Continue the journey ==&lt;br /&gt;
&lt;br /&gt;
The next essay, [[The Perl Lazarus Workshop]], examines the tools selected for this work: Strawberry Perl, wxWidgets, wxPerl, wxGlade, MSYS2, PAR-based packaging, and Inno Setup.&lt;br /&gt;
&lt;br /&gt;
The purpose will not be to present a random collection of software. It will be to understand how each tool contributes to one coherent craftsman&#039;s workshop, how the labor embodied in those tools makes new work possible, and why the chosen stack provides a practical route from Perl knowledge to a complete Windows application.&lt;br /&gt;
&lt;br /&gt;
The third essay, [[Raising a Working wxPerl Shop on Windows]], will then move from explanation to practice: installing the development environment, verifying wxPerl, adding wxGlade, establishing an efficient MSYS2 and vim workflow, generating Perl code, wiring an event, running the program under Strawberry Perl, and preserving the result in Git.&lt;br /&gt;
&lt;br /&gt;
The journey begins with an existing trade, a real human need, and the decision to bring useful work to completion.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Perl Craftsman Returns to the Windows Desktop}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Series:&#039;&#039;&#039; [[Portal:Essays about The Virtuous Perl Programmer|Essays about The Virtuous Perl Programmer]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Next essay:&#039;&#039;&#039; [[The Perl Lazarus Workshop]]&lt;br /&gt;
&lt;br /&gt;
[[Category:The Virtuous Perl Programmer]]&lt;br /&gt;
[[Category:Perl Lazarus Project]]&lt;br /&gt;
[[Category:wxPerl]]&lt;br /&gt;
[[Category:Perl Guilds]]&lt;br /&gt;
[[Category:Windows]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=The_Perl_Craftsman_Returns_to_the_Windows_Desktop&amp;diff=372</id>
		<title>The Perl Craftsman Returns to the Windows Desktop</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=The_Perl_Craftsman_Returns_to_the_Windows_Desktop&amp;diff=372"/>
		<updated>2026-07-19T21:13:58Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* The craft and the virtue */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:The Perl Craftsman Returns to the Windows Desktop}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This is the first essay in the series [[Portal:Essays about The Virtuous Perl Programmer|Essays about The Virtuous Perl Programmer]]. The series follows the practical journey from Perl programmer to craftsman of complete, distributable Windows applications.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
There comes a point in the life of a programmer when experience can become strangely tiring.&lt;br /&gt;
&lt;br /&gt;
The journeyman Perl programmer may have crossed many territories. He has repaired old systems, migrated databases, parsed uncooperative data, automated jobs, maintained web applications, connected APIs, managed servers, and rescued programs whose original authors disappeared years ago. He may have spent decades learning that the apparently simple problem is rarely simple, that data supplied by users never quite resembles the example, and that the machine which fails is usually not the machine on which the software was developed.&lt;br /&gt;
&lt;br /&gt;
The master Perl programmer may have done all of this while teaching others, supporting clients, maintaining community infrastructure, and carrying responsibility for systems which cannot simply be turned off and rewritten in the fashionable language of the year.&lt;br /&gt;
&lt;br /&gt;
Such a programmer is not obsolete. He may only be weary.&lt;br /&gt;
&lt;br /&gt;
The repeated announcement of Perl&#039;s death can become tiresome. So can working continually behind the scenes while newer communities rediscover techniques that Perl programmers have practiced for decades. The experienced Perl programmer may understandably ask whether there is any new territory worth crossing, or whether his remaining work consists only of maintaining what other people have abandoned.&lt;br /&gt;
&lt;br /&gt;
At the same time, a newer programmer may sit in front of a Windows computer and never encounter Perl at all. He may know that programs come from an application store, a game launcher, a download page, or a Git repository, but not yet understand that he can create those programs himself. He may be experimenting with game modifications, running a private server, editing configuration files, automating a repetitive task, or wondering how a favorite program works.&lt;br /&gt;
&lt;br /&gt;
He may, quite literally, be playing video games.&lt;br /&gt;
&lt;br /&gt;
This series is addressed to both programmers: the experienced craftsman who may need a new application for an old and powerful trade, and the prospective apprentice who has not yet discovered that programming can become his own craft.&lt;br /&gt;
&lt;br /&gt;
== The programmer as craftsman ==&lt;br /&gt;
&lt;br /&gt;
The language of the craftsman is useful because programming is not merely the manipulation of symbols. It is the application of knowledge, judgment, practiced skill, and responsibility to a human need.&lt;br /&gt;
&lt;br /&gt;
The traditional progression from apprentice to journeyman to master should not be treated as a rigid credentialing system or as an excuse for excluding newcomers. It is a way of describing growth within a trade.&lt;br /&gt;
&lt;br /&gt;
* The &#039;&#039;&#039;apprentice&#039;&#039;&#039; learns the tools, vocabulary, habits, and established practices of the craft.&lt;br /&gt;
* The &#039;&#039;&#039;journeyman&#039;&#039;&#039; can travel beyond the workshop in which he first learned and apply his skills to unfamiliar problems.&lt;br /&gt;
* The &#039;&#039;&#039;master&#039;&#039;&#039; accepts responsibility for complete work, judges its quality, serves customers, preserves knowledge, and helps form other craftsmen.&lt;br /&gt;
&lt;br /&gt;
A journeyman is not merely someone who has memorized more syntax than an apprentice. He has learned how to proceed when the documentation is incomplete, the operating environment is unfamiliar, and the first solution does not work.&lt;br /&gt;
&lt;br /&gt;
A master is not someone who has stopped learning. He is someone whose experience has taught him the weight of a promise. When he says that a program can be installed, can preserve a user&#039;s data, or can be supported in a particular environment, he understands that another person&#039;s work may depend upon that claim.&lt;br /&gt;
&lt;br /&gt;
A masterwork is therefore not merely a clever algorithm, an ingenious regular expression, or an impressive piece of code. It is work brought to completion.&lt;br /&gt;
&lt;br /&gt;
For a Windows desktop application, that completion may include:&lt;br /&gt;
&lt;br /&gt;
* a useful and understandable graphical interface;&lt;br /&gt;
* dependable handling of files and data;&lt;br /&gt;
* communication with an existing Perl web service;&lt;br /&gt;
* a Windows executable;&lt;br /&gt;
* a familiar installer;&lt;br /&gt;
* useful documentation;&lt;br /&gt;
* testing on a computer other than the developer&#039;s;&lt;br /&gt;
* a reasonable upgrade and uninstallation path;&lt;br /&gt;
* and a plan for supporting the people who use it.&lt;br /&gt;
&lt;br /&gt;
The purpose of [[Main Page|Perl Guilds]] is to encourage this fuller understanding of the programmer&#039;s trade: independent programmers sharing knowledge, cultivating practical specialties, forming one another in the craft, and helping one another earn a living through useful work.&lt;br /&gt;
&lt;br /&gt;
== An invitation to the weary journeyman ==&lt;br /&gt;
&lt;br /&gt;
The experienced Perl programmer already possesses much of what is needed to build a valuable desktop application.&lt;br /&gt;
&lt;br /&gt;
He may know how to:&lt;br /&gt;
&lt;br /&gt;
* validate and transform data;&lt;br /&gt;
* communicate with databases;&lt;br /&gt;
* consume and publish APIs;&lt;br /&gt;
* process text, images, or scientific data;&lt;br /&gt;
* operate remote services;&lt;br /&gt;
* automate complex workflows;&lt;br /&gt;
* authenticate users;&lt;br /&gt;
* generate reports;&lt;br /&gt;
* maintain compatibility;&lt;br /&gt;
* and diagnose failures in production.&lt;br /&gt;
&lt;br /&gt;
These abilities do not become irrelevant when a graphical interface is added. They become the substance behind the interface.&lt;br /&gt;
&lt;br /&gt;
The desktop is not a repudiation of the server work in which Perl programmers have excelled. It is another point at which that work can be placed into the hands of a user.&lt;br /&gt;
&lt;br /&gt;
A Perl programmer who has spent years building web applications may create a Windows client for one of those applications. A systems programmer may create an administrative console. A scientific programmer may package a model or data-analysis workflow for colleagues who will never use a command line. A collector, historian, translator, accountant, engineer, or small-business owner may need a specialized application that no large software company would consider profitable enough to build.&lt;br /&gt;
&lt;br /&gt;
The weary journeyman need not begin again as though his past experience counted for nothing. He must learn a new portion of the trade, but he brings his existing judgment with him.&lt;br /&gt;
&lt;br /&gt;
Perl is not the obstacle. Perl is the leverage.&lt;br /&gt;
&lt;br /&gt;
== An invitation to the future apprentice ==&lt;br /&gt;
&lt;br /&gt;
Perl also needs new programmers, and many potential programmers are sitting in front of Windows computers right now.&lt;br /&gt;
&lt;br /&gt;
It would be impossible to count all future programmers before they discover the craft. We can, however, observe where ordinary desktop users are. Windows remains the largest desktop operating-system family in worldwide usage measurements.&amp;lt;ref&amp;gt;[https://gs.statcounter.com/os-market-share/desktop/ StatCounter Global Stats, “Desktop Operating System Market Share Worldwide”]&amp;lt;/ref&amp;gt; It also remains the overwhelmingly prevalent operating-system environment among people participating in the Steam hardware survey.&amp;lt;ref&amp;gt;[https://store.steampowered.com/hwsurvey/ Valve, “Steam Hardware &amp;amp; Software Survey”]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Many of these users are playing games, installing modifications, running Discord communities, hosting servers, editing files, experimenting with hardware, or trying to automate some irritating part of their digital lives. These activities are not programming apprenticeships by themselves, but they are often close to the doorway.&lt;br /&gt;
&lt;br /&gt;
A person who asks, “Can I change how this game behaves?” is already asking a programmer&#039;s question.&lt;br /&gt;
&lt;br /&gt;
A person who runs a private game server has begun to encounter networking, configuration, permissions, logs, and failure recovery.&lt;br /&gt;
&lt;br /&gt;
A person who writes a small script to rename files or process game data has begun to discover that the computer can be instructed rather than merely consumed.&lt;br /&gt;
&lt;br /&gt;
If Perl wishes to recruit another generation, Perl programmers must be willing to meet prospective programmers where they are. That includes Windows.&lt;br /&gt;
&lt;br /&gt;
It is not enough to tell a Windows user that serious programmers eventually abandon his environment. It is better to show him that the computer he already owns can become a workshop; that Strawberry Perl gives him a native Perl environment; that wxPerl can create real graphical applications; and that the same language can later take him into web services, databases, systems work, scientific computing, and many other fields.&lt;br /&gt;
&lt;br /&gt;
The route into the craft should not require the apprentice first to adopt the operating-system preferences of the master.&lt;br /&gt;
&lt;br /&gt;
== Why return to the desktop? ==&lt;br /&gt;
&lt;br /&gt;
Perl programmers have long been especially effective behind the scenes.&lt;br /&gt;
&lt;br /&gt;
Perl may collect the data, operate the website, maintain the database, run the scientific model, communicate with an outside service, or generate the report. The ordinary user may benefit from all of this without ever seeing Perl directly.&lt;br /&gt;
&lt;br /&gt;
That is not a defect. Invisible infrastructure is often excellent work.&lt;br /&gt;
&lt;br /&gt;
Nevertheless, the Windows desktop offers another place for the Perl craftsman to practice his trade: directly in front of the person whose work the software is intended to serve.&lt;br /&gt;
&lt;br /&gt;
A desktop application may:&lt;br /&gt;
&lt;br /&gt;
* organize files already stored on the user&#039;s computer;&lt;br /&gt;
* provide a specialized editor or research interface;&lt;br /&gt;
* display data from a remote Perl application;&lt;br /&gt;
* upload images or documents for server-side processing;&lt;br /&gt;
* present results from a database or API;&lt;br /&gt;
* allow local work when the network is unavailable;&lt;br /&gt;
* interact with devices or applications installed on the computer;&lt;br /&gt;
* or provide a richer companion to an existing website.&lt;br /&gt;
&lt;br /&gt;
A service such as [https://boyscoutpatch.info/ BoyScoutPatch.info], for example, may continue to perform centralized work for which a web application is well suited, while a desktop client could provide a more specialized workflow for collectors, researchers, or administrators.&lt;br /&gt;
&lt;br /&gt;
This is an application of subsidiarity. The server should perform work which genuinely belongs on the server. The desktop should perform work which is best placed in the user&#039;s hands.&lt;br /&gt;
&lt;br /&gt;
The objective is not to replace every web application with a desktop program. It is to place each responsibility where it can be performed most effectively, while avoiding needless centralization and needless dependence upon a permanent network connection.&lt;br /&gt;
&lt;br /&gt;
== Why Windows? ==&lt;br /&gt;
&lt;br /&gt;
This series deliberately focuses on Windows.&lt;br /&gt;
&lt;br /&gt;
That does not imply that Windows is the only worthy platform, or that wxPerl cannot be useful elsewhere. It means that a craftsman must eventually choose a definite workshop and a definite group of users.&lt;br /&gt;
&lt;br /&gt;
Windows offers several practical advantages for this undertaking.&lt;br /&gt;
&lt;br /&gt;
First, Windows has a very large population of ordinary desktop users. That population includes customers, office workers, researchers, collectors, students, gamers, and prospective programmers.&lt;br /&gt;
&lt;br /&gt;
Second, specialized commercial desktop software is familiar on Windows. Users understand the idea of downloading an application, running an installer, finding the program in the Start menu, and paying for a tool which performs useful work.&lt;br /&gt;
&lt;br /&gt;
Third, Windows is unusually committed to backward application compatibility. Microsoft states that it goes to great lengths to maintain application and device compatibility across operating-system version changes, especially for ordinary applications without kernel dependencies.&amp;lt;ref&amp;gt;[https://learn.microsoft.com/en-us/windows/compatibility/windows-version-check Microsoft Learn, “Windows version check”]&amp;lt;/ref&amp;gt; Windows application manifests even allow newer versions of Windows to preserve behaviors expected by applications targeting older releases.&amp;lt;ref&amp;gt;[https://learn.microsoft.com/en-us/windows/compatibility/application-executable-manifest Microsoft Learn, “App executable manifest”]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No compatibility promise is absolute. Security changes, removed components, architecture changes, obsolete drivers, and undocumented assumptions can still break old programs. Nevertheless, Windows demonstrates an unusually strong expectation that software written for an earlier generation should continue to function.&lt;br /&gt;
&lt;br /&gt;
That expectation matters to the independent craftsman.&lt;br /&gt;
&lt;br /&gt;
A specialized application may serve a modest community for many years. Its value may come from stability rather than constant reinvention. A program which continues working through several generations of hardware and operating systems can repay its development cost many times over.&lt;br /&gt;
&lt;br /&gt;
Perl&#039;s own concern for compatibility belongs naturally in such an environment. Experiments with ActivePerl 5.8.8 on Windows 98 illustrate the extraordinary historical reach of both ecosystems. That does not mean new commercial software should target Windows 98. It means the craftsman should recognize the strategic value of technologies which respect existing work.&lt;br /&gt;
&lt;br /&gt;
Fourth, Strawberry Perl provides a serious native Windows Perl environment. It includes Perl, a compiler, build utilities, and access to the CPAN ecosystem. The Windows programmer is not confined to a toy interpreter or an imitation of a Unix system.&lt;br /&gt;
&lt;br /&gt;
Finally, many Perl programmers already use Windows as a daily working environment, and many possible new Perl programmers begin there.&lt;br /&gt;
&lt;br /&gt;
The choice is therefore practical rather than ideological.&lt;br /&gt;
&lt;br /&gt;
The question is not, “Which operating system proves that I am a proper programmer?”&lt;br /&gt;
&lt;br /&gt;
The question is, “Where can existing Perl knowledge be turned into useful software, and where can new craftsmen be invited into the trade?”&lt;br /&gt;
&lt;br /&gt;
== Extreme compatibility creates an opportunity ==&lt;br /&gt;
&lt;br /&gt;
Windows&#039; backward compatibility does more than preserve old software. It encourages a particular kind of small-scale production.&lt;br /&gt;
&lt;br /&gt;
A large vendor may prefer subscriptions, rapid replacement, cloud dependence, and frequent redesign. An independent craftsman may instead produce a focused application which performs one job well and continues doing it for a long time.&lt;br /&gt;
&lt;br /&gt;
That application might serve only a few hundred users. It might serve a laboratory, a local company, a collecting community, a nonprofit, or a narrow professional field. Its market may be too small for a major software firm but large enough to support the person who understands the problem.&lt;br /&gt;
&lt;br /&gt;
Long-lived desktop software also creates continuing forms of useful labor:&lt;br /&gt;
&lt;br /&gt;
* installation;&lt;br /&gt;
* customization;&lt;br /&gt;
* data conversion;&lt;br /&gt;
* training;&lt;br /&gt;
* compatibility maintenance;&lt;br /&gt;
* support;&lt;br /&gt;
* integration with newer services;&lt;br /&gt;
* and carefully managed upgrades.&lt;br /&gt;
&lt;br /&gt;
Backward compatibility does not eliminate this labor. It gives the labor a durable foundation.&lt;br /&gt;
&lt;br /&gt;
The programmer can improve the application without forcing every user to abandon previous work. The user can invest time learning a tool with some confidence that the tool will not disappear merely because an investor has changed direction.&lt;br /&gt;
&lt;br /&gt;
This relationship between craftsman and user is especially important in a guild-minded approach to software. The programmer is not merely attempting to capture attention. He is accepting responsibility for an instrument another person may use in his own work.&lt;br /&gt;
&lt;br /&gt;
== From a working script to a Windows product ==&lt;br /&gt;
&lt;br /&gt;
A Perl script and a Windows product may contain the same essential program logic, but the user&#039;s experience is very different.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ From the developer&#039;s program to the user&#039;s product&lt;br /&gt;
! The developer may have&lt;br /&gt;
! The Windows user reasonably expects&lt;br /&gt;
|-&lt;br /&gt;
| A &amp;lt;code&amp;gt;.pl&amp;lt;/code&amp;gt; file&lt;br /&gt;
| An application that starts from an icon&lt;br /&gt;
|-&lt;br /&gt;
| Installed CPAN modules&lt;br /&gt;
| No requirement to install Perl or dependencies&lt;br /&gt;
|-&lt;br /&gt;
| Commands entered in a terminal&lt;br /&gt;
| A graphical interface&lt;br /&gt;
|-&lt;br /&gt;
| Paths that work on the development computer&lt;br /&gt;
| Correct installation and user-data directories&lt;br /&gt;
|-&lt;br /&gt;
| Diagnostic output in a console&lt;br /&gt;
| Understandable errors and useful logs&lt;br /&gt;
|-&lt;br /&gt;
| A program that works in the workshop&lt;br /&gt;
| A program that works on the user&#039;s computer&lt;br /&gt;
|-&lt;br /&gt;
| A collection of build commands&lt;br /&gt;
| A repeatable installer and upgrade procedure&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The difficult question is therefore not merely whether Perl can display a graphical window. It can.&lt;br /&gt;
&lt;br /&gt;
The difficult question is whether we can establish a clear and repeatable path from the Perl programmer&#039;s existing skills to software which an ordinary Windows user can install and use.&lt;br /&gt;
&lt;br /&gt;
That is the purpose of the [[Developing and Distributing wxPerl Applications on Windows|Perl Lazarus Project&#039;s documented Windows workflow]].&lt;br /&gt;
&lt;br /&gt;
== The Perl Lazarus journey ==&lt;br /&gt;
&lt;br /&gt;
[[File:perl-lazarus-project-workflow.png|thumb|right|420px|alt=Six-stage Perl Lazarus Project workflow from installing the development stack through testing the finished Windows application|The Perl Lazarus Project follows a complete path: install the stack, design the GUI, write the Perl code, package the executable, build the installer, and test the result on Windows.]]&lt;br /&gt;
&lt;br /&gt;
The Perl Lazarus Project builds upon the renewed wxPerl work associated with Johan Vromans and others in the wxPerl community.&amp;lt;ref&amp;gt;[https://dev.to/sciurius/wxperl-revival-5fde Johan Vromans, “wxPerl Revival”]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Its name also acknowledges the example of the [https://www.lazarus-ide.org/ Lazarus IDE and Free Pascal community]. Lazarus demonstrates what can happen when a programming community joins a language, a visual designer, components, documentation, packaging practices, and an economy of books, support, consulting, and application development.&lt;br /&gt;
&lt;br /&gt;
Perl does not necessarily need a single enormous Lazarus-like IDE. It needs a clear path which craftsmen can follow:&lt;br /&gt;
&lt;br /&gt;
# Install a known working development stack.&lt;br /&gt;
# Design the interface.&lt;br /&gt;
# Generate and write Perl code.&lt;br /&gt;
# Package the application as an executable.&lt;br /&gt;
# Build a Windows installer.&lt;br /&gt;
# Test the installed program on a clean Windows system.&lt;br /&gt;
&lt;br /&gt;
The significance of this path is not that any individual step is unknown. Perl already has a native Windows distribution, graphical bindings, interface-design tools, packaging modules, and installer technology. The missing element has been a coherent and repeatable journey connecting them.&lt;br /&gt;
&lt;br /&gt;
The present stack joins Strawberry Perl, wxWidgets, wxPerl, wxGlade, PAR-based packaging tools, and Inno Setup. The next essay, [[The Perl Lazarus Workshop]], will explain why these tools belong together and what role each one performs in the craftsman’s workshop.&lt;br /&gt;
&lt;br /&gt;
The series will then proceed through installation, visual design, the wxGlade-to-Perl development cycle, application structure, local data, communication with Perl web services, executable creation, installer construction, testing, and support.&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
[[File:nhc-advisory-explorer-windows.png|thumb|left|380px|alt=NHC Advisory Explorer running as a packaged Windows desktop application|The NHC Advisory Explorer demonstrates the practical result: a wxPerl program packaged for ordinary Windows users.]]&lt;br /&gt;
&lt;br /&gt;
This is not merely a theoretical possibility. The [https://github.com/StormSurgeLive/nhc-advisory-gui NHC Advisory Explorer] is one example of a wxPerl program packaged for Windows users.&amp;lt;ref&amp;gt;[https://github.com/StormSurgeLive/nhc-advisory-gui StormSurgeLive, “NHC Advisory Explorer”]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The program retrieves and presents National Hurricane Center advisory information through a familiar desktop interface. More importantly for this series, it demonstrates that the complete path can be followed: a Perl application can be given a graphical interface, packaged as a Windows executable, placed into an installer, and distributed to users who do not need to install Perl or understand the application’s dependencies.&lt;br /&gt;
&lt;br /&gt;
That final point is essential. The Perl programmer may know that the application depends upon Strawberry Perl, wxPerl, wxWidgets, CPAN modules, native DLLs, and packaging tools. The user should ordinarily experience only a Windows application which installs and runs in the expected way.&lt;br /&gt;
&lt;br /&gt;
Readers who want to examine earlier tools and historical attempts at wxWidgets rapid application development in Perl may also consult [[Perl and wxWidgets RAD on Windows]].&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
== The craft and the virtue ==&lt;br /&gt;
&lt;br /&gt;
The virtues themselves are discussed elsewhere on Perl Guilds. Here our concern is how they direct the work at hand.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Practical wisdom, or prudence, not laziness&#039;&#039;&#039; asks the craftsman to identify a genuine human good and choose fitting means of attaining it.&lt;br /&gt;
&lt;br /&gt;
For the weary journeyman or master, prudence may require learning a new part of the trade rather than endlessly repeating familiar server-side work. Existing Perl experience is not discarded. It is redirected and extended.&lt;br /&gt;
&lt;br /&gt;
For the apprentice, prudence means refusing the temptation to skip directly to a polished commercial product without first learning the underlying tools and workflow.&lt;br /&gt;
&lt;br /&gt;
Automation does not eliminate the importance of labor. All earthly economic value added by human society is created through human labor acting upon the gifts of creation. A tool preserves earlier labor and allows new labor to be applied more effectively, but it does not recognize the user&#039;s need, exercise judgment, accept responsibility, or provide service by itself.&lt;br /&gt;
&lt;br /&gt;
The aim of the virtuous programmer is therefore not to avoid work. It is to avoid wasting work.&lt;br /&gt;
&lt;br /&gt;
A repeatable installation procedure preserves labor.&lt;br /&gt;
&lt;br /&gt;
A visual GUI builder reduces unnecessary mechanical effort.&lt;br /&gt;
&lt;br /&gt;
Reusable Perl modules preserve tested knowledge.&lt;br /&gt;
&lt;br /&gt;
An installer saves every user from recreating the developer&#039;s environment.&lt;br /&gt;
&lt;br /&gt;
Backward compatibility protects work already performed by programmers and users.&lt;br /&gt;
&lt;br /&gt;
Good tools allow the craftsman to direct more effort toward understanding the user and completing the work. The final measure of the work is not merely technical efficiency or profit, but whether it truthfully and justly serves the persons and communities for whom it was made.&lt;br /&gt;
&lt;br /&gt;
The purpose of this series is therefore larger than the recovery of a neglected technical workflow. A craft forms the craftsman. The habits by which we design, build, test, sell, and support software shape the kind of people we become.&lt;br /&gt;
&lt;br /&gt;
A programmer who learns to see users as persons rather than abstractions, to give fellow workers their due, to admit error, to keep promises, to restrain ambition, and to place skill at the service of genuine human needs is learning more than application development.&lt;br /&gt;
&lt;br /&gt;
Technical mastery is good, but it is not the highest good. The craft reaches its proper end when knowledge, tools, and labor are ordered toward truthful service of persons and communities.&lt;br /&gt;
&lt;br /&gt;
== At the workbench: propose a masterwork ==&lt;br /&gt;
&lt;br /&gt;
Before installing anything, describe one possible application.&lt;br /&gt;
&lt;br /&gt;
Write down:&lt;br /&gt;
&lt;br /&gt;
# Who will use it?&lt;br /&gt;
# What work are they doing now?&lt;br /&gt;
# What part of that work belongs on the desktop?&lt;br /&gt;
# What part, if any, belongs on a Perl-powered server?&lt;br /&gt;
# What files or data will the user provide?&lt;br /&gt;
# What result will the application produce?&lt;br /&gt;
# What is the smallest version that would be genuinely useful?&lt;br /&gt;
# Why would someone install it?&lt;br /&gt;
# Why might someone reasonably pay for it?&lt;br /&gt;
# What responsibility will you accept after delivering it?&lt;br /&gt;
# Could an apprentice learn something by helping with it?&lt;br /&gt;
# Could the application remain useful for five or ten years?&lt;br /&gt;
&lt;br /&gt;
The proposal need not describe a large product. A narrow tool completed well is a better masterwork than an ambitious system which never leaves the developer&#039;s computer.&lt;br /&gt;
&lt;br /&gt;
== Continue the journey ==&lt;br /&gt;
&lt;br /&gt;
The next essay, [[The Perl Lazarus Workshop]], examines the tools selected for this work: Strawberry Perl, wxWidgets, wxPerl, wxGlade, MSYS2, PAR-based packaging, and Inno Setup.&lt;br /&gt;
&lt;br /&gt;
The purpose will not be to present a random collection of software. It will be to understand how each tool contributes to one coherent craftsman&#039;s workshop, and how the labor embodied in these tools allows a Perl programmer to perform new work of his own.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Perl Craftsman Returns to the Windows Desktop}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Series:&#039;&#039;&#039; [[Portal:Essays about The Virtuous Perl Programmer|Essays about The Virtuous Perl Programmer]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Next essay:&#039;&#039;&#039; [[The Perl Lazarus Workshop]]&lt;br /&gt;
&lt;br /&gt;
[[Category:The Virtuous Perl Programmer]]&lt;br /&gt;
[[Category:Perl Lazarus Project]]&lt;br /&gt;
[[Category:wxPerl]]&lt;br /&gt;
[[Category:Perl Guilds]]&lt;br /&gt;
[[Category:Windows]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=Template:Clear&amp;diff=371</id>
		<title>Template:Clear</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=Template:Clear&amp;diff=371"/>
		<updated>2026-07-19T21:08:53Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=The_Perl_Craftsman_Returns_to_the_Windows_Desktop&amp;diff=370</id>
		<title>The Perl Craftsman Returns to the Windows Desktop</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=The_Perl_Craftsman_Returns_to_the_Windows_Desktop&amp;diff=370"/>
		<updated>2026-07-19T21:08:30Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* The Perl Lazarus journey */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:The Perl Craftsman Returns to the Windows Desktop}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This is the first essay in the series [[Portal:Essays about The Virtuous Perl Programmer|Essays about The Virtuous Perl Programmer]]. The series follows the practical journey from Perl programmer to craftsman of complete, distributable Windows applications.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
There comes a point in the life of a programmer when experience can become strangely tiring.&lt;br /&gt;
&lt;br /&gt;
The journeyman Perl programmer may have crossed many territories. He has repaired old systems, migrated databases, parsed uncooperative data, automated jobs, maintained web applications, connected APIs, managed servers, and rescued programs whose original authors disappeared years ago. He may have spent decades learning that the apparently simple problem is rarely simple, that data supplied by users never quite resembles the example, and that the machine which fails is usually not the machine on which the software was developed.&lt;br /&gt;
&lt;br /&gt;
The master Perl programmer may have done all of this while teaching others, supporting clients, maintaining community infrastructure, and carrying responsibility for systems which cannot simply be turned off and rewritten in the fashionable language of the year.&lt;br /&gt;
&lt;br /&gt;
Such a programmer is not obsolete. He may only be weary.&lt;br /&gt;
&lt;br /&gt;
The repeated announcement of Perl&#039;s death can become tiresome. So can working continually behind the scenes while newer communities rediscover techniques that Perl programmers have practiced for decades. The experienced Perl programmer may understandably ask whether there is any new territory worth crossing, or whether his remaining work consists only of maintaining what other people have abandoned.&lt;br /&gt;
&lt;br /&gt;
At the same time, a newer programmer may sit in front of a Windows computer and never encounter Perl at all. He may know that programs come from an application store, a game launcher, a download page, or a Git repository, but not yet understand that he can create those programs himself. He may be experimenting with game modifications, running a private server, editing configuration files, automating a repetitive task, or wondering how a favorite program works.&lt;br /&gt;
&lt;br /&gt;
He may, quite literally, be playing video games.&lt;br /&gt;
&lt;br /&gt;
This series is addressed to both programmers: the experienced craftsman who may need a new application for an old and powerful trade, and the prospective apprentice who has not yet discovered that programming can become his own craft.&lt;br /&gt;
&lt;br /&gt;
== The programmer as craftsman ==&lt;br /&gt;
&lt;br /&gt;
The language of the craftsman is useful because programming is not merely the manipulation of symbols. It is the application of knowledge, judgment, practiced skill, and responsibility to a human need.&lt;br /&gt;
&lt;br /&gt;
The traditional progression from apprentice to journeyman to master should not be treated as a rigid credentialing system or as an excuse for excluding newcomers. It is a way of describing growth within a trade.&lt;br /&gt;
&lt;br /&gt;
* The &#039;&#039;&#039;apprentice&#039;&#039;&#039; learns the tools, vocabulary, habits, and established practices of the craft.&lt;br /&gt;
* The &#039;&#039;&#039;journeyman&#039;&#039;&#039; can travel beyond the workshop in which he first learned and apply his skills to unfamiliar problems.&lt;br /&gt;
* The &#039;&#039;&#039;master&#039;&#039;&#039; accepts responsibility for complete work, judges its quality, serves customers, preserves knowledge, and helps form other craftsmen.&lt;br /&gt;
&lt;br /&gt;
A journeyman is not merely someone who has memorized more syntax than an apprentice. He has learned how to proceed when the documentation is incomplete, the operating environment is unfamiliar, and the first solution does not work.&lt;br /&gt;
&lt;br /&gt;
A master is not someone who has stopped learning. He is someone whose experience has taught him the weight of a promise. When he says that a program can be installed, can preserve a user&#039;s data, or can be supported in a particular environment, he understands that another person&#039;s work may depend upon that claim.&lt;br /&gt;
&lt;br /&gt;
A masterwork is therefore not merely a clever algorithm, an ingenious regular expression, or an impressive piece of code. It is work brought to completion.&lt;br /&gt;
&lt;br /&gt;
For a Windows desktop application, that completion may include:&lt;br /&gt;
&lt;br /&gt;
* a useful and understandable graphical interface;&lt;br /&gt;
* dependable handling of files and data;&lt;br /&gt;
* communication with an existing Perl web service;&lt;br /&gt;
* a Windows executable;&lt;br /&gt;
* a familiar installer;&lt;br /&gt;
* useful documentation;&lt;br /&gt;
* testing on a computer other than the developer&#039;s;&lt;br /&gt;
* a reasonable upgrade and uninstallation path;&lt;br /&gt;
* and a plan for supporting the people who use it.&lt;br /&gt;
&lt;br /&gt;
The purpose of [[Main Page|Perl Guilds]] is to encourage this fuller understanding of the programmer&#039;s trade: independent programmers sharing knowledge, cultivating practical specialties, forming one another in the craft, and helping one another earn a living through useful work.&lt;br /&gt;
&lt;br /&gt;
== An invitation to the weary journeyman ==&lt;br /&gt;
&lt;br /&gt;
The experienced Perl programmer already possesses much of what is needed to build a valuable desktop application.&lt;br /&gt;
&lt;br /&gt;
He may know how to:&lt;br /&gt;
&lt;br /&gt;
* validate and transform data;&lt;br /&gt;
* communicate with databases;&lt;br /&gt;
* consume and publish APIs;&lt;br /&gt;
* process text, images, or scientific data;&lt;br /&gt;
* operate remote services;&lt;br /&gt;
* automate complex workflows;&lt;br /&gt;
* authenticate users;&lt;br /&gt;
* generate reports;&lt;br /&gt;
* maintain compatibility;&lt;br /&gt;
* and diagnose failures in production.&lt;br /&gt;
&lt;br /&gt;
These abilities do not become irrelevant when a graphical interface is added. They become the substance behind the interface.&lt;br /&gt;
&lt;br /&gt;
The desktop is not a repudiation of the server work in which Perl programmers have excelled. It is another point at which that work can be placed into the hands of a user.&lt;br /&gt;
&lt;br /&gt;
A Perl programmer who has spent years building web applications may create a Windows client for one of those applications. A systems programmer may create an administrative console. A scientific programmer may package a model or data-analysis workflow for colleagues who will never use a command line. A collector, historian, translator, accountant, engineer, or small-business owner may need a specialized application that no large software company would consider profitable enough to build.&lt;br /&gt;
&lt;br /&gt;
The weary journeyman need not begin again as though his past experience counted for nothing. He must learn a new portion of the trade, but he brings his existing judgment with him.&lt;br /&gt;
&lt;br /&gt;
Perl is not the obstacle. Perl is the leverage.&lt;br /&gt;
&lt;br /&gt;
== An invitation to the future apprentice ==&lt;br /&gt;
&lt;br /&gt;
Perl also needs new programmers, and many potential programmers are sitting in front of Windows computers right now.&lt;br /&gt;
&lt;br /&gt;
It would be impossible to count all future programmers before they discover the craft. We can, however, observe where ordinary desktop users are. Windows remains the largest desktop operating-system family in worldwide usage measurements.&amp;lt;ref&amp;gt;[https://gs.statcounter.com/os-market-share/desktop/ StatCounter Global Stats, “Desktop Operating System Market Share Worldwide”]&amp;lt;/ref&amp;gt; It also remains the overwhelmingly prevalent operating-system environment among people participating in the Steam hardware survey.&amp;lt;ref&amp;gt;[https://store.steampowered.com/hwsurvey/ Valve, “Steam Hardware &amp;amp; Software Survey”]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Many of these users are playing games, installing modifications, running Discord communities, hosting servers, editing files, experimenting with hardware, or trying to automate some irritating part of their digital lives. These activities are not programming apprenticeships by themselves, but they are often close to the doorway.&lt;br /&gt;
&lt;br /&gt;
A person who asks, “Can I change how this game behaves?” is already asking a programmer&#039;s question.&lt;br /&gt;
&lt;br /&gt;
A person who runs a private game server has begun to encounter networking, configuration, permissions, logs, and failure recovery.&lt;br /&gt;
&lt;br /&gt;
A person who writes a small script to rename files or process game data has begun to discover that the computer can be instructed rather than merely consumed.&lt;br /&gt;
&lt;br /&gt;
If Perl wishes to recruit another generation, Perl programmers must be willing to meet prospective programmers where they are. That includes Windows.&lt;br /&gt;
&lt;br /&gt;
It is not enough to tell a Windows user that serious programmers eventually abandon his environment. It is better to show him that the computer he already owns can become a workshop; that Strawberry Perl gives him a native Perl environment; that wxPerl can create real graphical applications; and that the same language can later take him into web services, databases, systems work, scientific computing, and many other fields.&lt;br /&gt;
&lt;br /&gt;
The route into the craft should not require the apprentice first to adopt the operating-system preferences of the master.&lt;br /&gt;
&lt;br /&gt;
== Why return to the desktop? ==&lt;br /&gt;
&lt;br /&gt;
Perl programmers have long been especially effective behind the scenes.&lt;br /&gt;
&lt;br /&gt;
Perl may collect the data, operate the website, maintain the database, run the scientific model, communicate with an outside service, or generate the report. The ordinary user may benefit from all of this without ever seeing Perl directly.&lt;br /&gt;
&lt;br /&gt;
That is not a defect. Invisible infrastructure is often excellent work.&lt;br /&gt;
&lt;br /&gt;
Nevertheless, the Windows desktop offers another place for the Perl craftsman to practice his trade: directly in front of the person whose work the software is intended to serve.&lt;br /&gt;
&lt;br /&gt;
A desktop application may:&lt;br /&gt;
&lt;br /&gt;
* organize files already stored on the user&#039;s computer;&lt;br /&gt;
* provide a specialized editor or research interface;&lt;br /&gt;
* display data from a remote Perl application;&lt;br /&gt;
* upload images or documents for server-side processing;&lt;br /&gt;
* present results from a database or API;&lt;br /&gt;
* allow local work when the network is unavailable;&lt;br /&gt;
* interact with devices or applications installed on the computer;&lt;br /&gt;
* or provide a richer companion to an existing website.&lt;br /&gt;
&lt;br /&gt;
A service such as [https://boyscoutpatch.info/ BoyScoutPatch.info], for example, may continue to perform centralized work for which a web application is well suited, while a desktop client could provide a more specialized workflow for collectors, researchers, or administrators.&lt;br /&gt;
&lt;br /&gt;
This is an application of subsidiarity. The server should perform work which genuinely belongs on the server. The desktop should perform work which is best placed in the user&#039;s hands.&lt;br /&gt;
&lt;br /&gt;
The objective is not to replace every web application with a desktop program. It is to place each responsibility where it can be performed most effectively, while avoiding needless centralization and needless dependence upon a permanent network connection.&lt;br /&gt;
&lt;br /&gt;
== Why Windows? ==&lt;br /&gt;
&lt;br /&gt;
This series deliberately focuses on Windows.&lt;br /&gt;
&lt;br /&gt;
That does not imply that Windows is the only worthy platform, or that wxPerl cannot be useful elsewhere. It means that a craftsman must eventually choose a definite workshop and a definite group of users.&lt;br /&gt;
&lt;br /&gt;
Windows offers several practical advantages for this undertaking.&lt;br /&gt;
&lt;br /&gt;
First, Windows has a very large population of ordinary desktop users. That population includes customers, office workers, researchers, collectors, students, gamers, and prospective programmers.&lt;br /&gt;
&lt;br /&gt;
Second, specialized commercial desktop software is familiar on Windows. Users understand the idea of downloading an application, running an installer, finding the program in the Start menu, and paying for a tool which performs useful work.&lt;br /&gt;
&lt;br /&gt;
Third, Windows is unusually committed to backward application compatibility. Microsoft states that it goes to great lengths to maintain application and device compatibility across operating-system version changes, especially for ordinary applications without kernel dependencies.&amp;lt;ref&amp;gt;[https://learn.microsoft.com/en-us/windows/compatibility/windows-version-check Microsoft Learn, “Windows version check”]&amp;lt;/ref&amp;gt; Windows application manifests even allow newer versions of Windows to preserve behaviors expected by applications targeting older releases.&amp;lt;ref&amp;gt;[https://learn.microsoft.com/en-us/windows/compatibility/application-executable-manifest Microsoft Learn, “App executable manifest”]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No compatibility promise is absolute. Security changes, removed components, architecture changes, obsolete drivers, and undocumented assumptions can still break old programs. Nevertheless, Windows demonstrates an unusually strong expectation that software written for an earlier generation should continue to function.&lt;br /&gt;
&lt;br /&gt;
That expectation matters to the independent craftsman.&lt;br /&gt;
&lt;br /&gt;
A specialized application may serve a modest community for many years. Its value may come from stability rather than constant reinvention. A program which continues working through several generations of hardware and operating systems can repay its development cost many times over.&lt;br /&gt;
&lt;br /&gt;
Perl&#039;s own concern for compatibility belongs naturally in such an environment. Experiments with ActivePerl 5.8.8 on Windows 98 illustrate the extraordinary historical reach of both ecosystems. That does not mean new commercial software should target Windows 98. It means the craftsman should recognize the strategic value of technologies which respect existing work.&lt;br /&gt;
&lt;br /&gt;
Fourth, Strawberry Perl provides a serious native Windows Perl environment. It includes Perl, a compiler, build utilities, and access to the CPAN ecosystem. The Windows programmer is not confined to a toy interpreter or an imitation of a Unix system.&lt;br /&gt;
&lt;br /&gt;
Finally, many Perl programmers already use Windows as a daily working environment, and many possible new Perl programmers begin there.&lt;br /&gt;
&lt;br /&gt;
The choice is therefore practical rather than ideological.&lt;br /&gt;
&lt;br /&gt;
The question is not, “Which operating system proves that I am a proper programmer?”&lt;br /&gt;
&lt;br /&gt;
The question is, “Where can existing Perl knowledge be turned into useful software, and where can new craftsmen be invited into the trade?”&lt;br /&gt;
&lt;br /&gt;
== Extreme compatibility creates an opportunity ==&lt;br /&gt;
&lt;br /&gt;
Windows&#039; backward compatibility does more than preserve old software. It encourages a particular kind of small-scale production.&lt;br /&gt;
&lt;br /&gt;
A large vendor may prefer subscriptions, rapid replacement, cloud dependence, and frequent redesign. An independent craftsman may instead produce a focused application which performs one job well and continues doing it for a long time.&lt;br /&gt;
&lt;br /&gt;
That application might serve only a few hundred users. It might serve a laboratory, a local company, a collecting community, a nonprofit, or a narrow professional field. Its market may be too small for a major software firm but large enough to support the person who understands the problem.&lt;br /&gt;
&lt;br /&gt;
Long-lived desktop software also creates continuing forms of useful labor:&lt;br /&gt;
&lt;br /&gt;
* installation;&lt;br /&gt;
* customization;&lt;br /&gt;
* data conversion;&lt;br /&gt;
* training;&lt;br /&gt;
* compatibility maintenance;&lt;br /&gt;
* support;&lt;br /&gt;
* integration with newer services;&lt;br /&gt;
* and carefully managed upgrades.&lt;br /&gt;
&lt;br /&gt;
Backward compatibility does not eliminate this labor. It gives the labor a durable foundation.&lt;br /&gt;
&lt;br /&gt;
The programmer can improve the application without forcing every user to abandon previous work. The user can invest time learning a tool with some confidence that the tool will not disappear merely because an investor has changed direction.&lt;br /&gt;
&lt;br /&gt;
This relationship between craftsman and user is especially important in a guild-minded approach to software. The programmer is not merely attempting to capture attention. He is accepting responsibility for an instrument another person may use in his own work.&lt;br /&gt;
&lt;br /&gt;
== From a working script to a Windows product ==&lt;br /&gt;
&lt;br /&gt;
A Perl script and a Windows product may contain the same essential program logic, but the user&#039;s experience is very different.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ From the developer&#039;s program to the user&#039;s product&lt;br /&gt;
! The developer may have&lt;br /&gt;
! The Windows user reasonably expects&lt;br /&gt;
|-&lt;br /&gt;
| A &amp;lt;code&amp;gt;.pl&amp;lt;/code&amp;gt; file&lt;br /&gt;
| An application that starts from an icon&lt;br /&gt;
|-&lt;br /&gt;
| Installed CPAN modules&lt;br /&gt;
| No requirement to install Perl or dependencies&lt;br /&gt;
|-&lt;br /&gt;
| Commands entered in a terminal&lt;br /&gt;
| A graphical interface&lt;br /&gt;
|-&lt;br /&gt;
| Paths that work on the development computer&lt;br /&gt;
| Correct installation and user-data directories&lt;br /&gt;
|-&lt;br /&gt;
| Diagnostic output in a console&lt;br /&gt;
| Understandable errors and useful logs&lt;br /&gt;
|-&lt;br /&gt;
| A program that works in the workshop&lt;br /&gt;
| A program that works on the user&#039;s computer&lt;br /&gt;
|-&lt;br /&gt;
| A collection of build commands&lt;br /&gt;
| A repeatable installer and upgrade procedure&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The difficult question is therefore not merely whether Perl can display a graphical window. It can.&lt;br /&gt;
&lt;br /&gt;
The difficult question is whether we can establish a clear and repeatable path from the Perl programmer&#039;s existing skills to software which an ordinary Windows user can install and use.&lt;br /&gt;
&lt;br /&gt;
That is the purpose of the [[Developing and Distributing wxPerl Applications on Windows|Perl Lazarus Project&#039;s documented Windows workflow]].&lt;br /&gt;
&lt;br /&gt;
== The Perl Lazarus journey ==&lt;br /&gt;
&lt;br /&gt;
[[File:perl-lazarus-project-workflow.png|thumb|right|420px|alt=Six-stage Perl Lazarus Project workflow from installing the development stack through testing the finished Windows application|The Perl Lazarus Project follows a complete path: install the stack, design the GUI, write the Perl code, package the executable, build the installer, and test the result on Windows.]]&lt;br /&gt;
&lt;br /&gt;
The Perl Lazarus Project builds upon the renewed wxPerl work associated with Johan Vromans and others in the wxPerl community.&amp;lt;ref&amp;gt;[https://dev.to/sciurius/wxperl-revival-5fde Johan Vromans, “wxPerl Revival”]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Its name also acknowledges the example of the [https://www.lazarus-ide.org/ Lazarus IDE and Free Pascal community]. Lazarus demonstrates what can happen when a programming community joins a language, a visual designer, components, documentation, packaging practices, and an economy of books, support, consulting, and application development.&lt;br /&gt;
&lt;br /&gt;
Perl does not necessarily need a single enormous Lazarus-like IDE. It needs a clear path which craftsmen can follow:&lt;br /&gt;
&lt;br /&gt;
# Install a known working development stack.&lt;br /&gt;
# Design the interface.&lt;br /&gt;
# Generate and write Perl code.&lt;br /&gt;
# Package the application as an executable.&lt;br /&gt;
# Build a Windows installer.&lt;br /&gt;
# Test the installed program on a clean Windows system.&lt;br /&gt;
&lt;br /&gt;
The significance of this path is not that any individual step is unknown. Perl already has a native Windows distribution, graphical bindings, interface-design tools, packaging modules, and installer technology. The missing element has been a coherent and repeatable journey connecting them.&lt;br /&gt;
&lt;br /&gt;
The present stack joins Strawberry Perl, wxWidgets, wxPerl, wxGlade, PAR-based packaging tools, and Inno Setup. The next essay, [[The Perl Lazarus Workshop]], will explain why these tools belong together and what role each one performs in the craftsman’s workshop.&lt;br /&gt;
&lt;br /&gt;
The series will then proceed through installation, visual design, the wxGlade-to-Perl development cycle, application structure, local data, communication with Perl web services, executable creation, installer construction, testing, and support.&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
[[File:nhc-advisory-explorer-windows.png|thumb|left|380px|alt=NHC Advisory Explorer running as a packaged Windows desktop application|The NHC Advisory Explorer demonstrates the practical result: a wxPerl program packaged for ordinary Windows users.]]&lt;br /&gt;
&lt;br /&gt;
This is not merely a theoretical possibility. The [https://github.com/StormSurgeLive/nhc-advisory-gui NHC Advisory Explorer] is one example of a wxPerl program packaged for Windows users.&amp;lt;ref&amp;gt;[https://github.com/StormSurgeLive/nhc-advisory-gui StormSurgeLive, “NHC Advisory Explorer”]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The program retrieves and presents National Hurricane Center advisory information through a familiar desktop interface. More importantly for this series, it demonstrates that the complete path can be followed: a Perl application can be given a graphical interface, packaged as a Windows executable, placed into an installer, and distributed to users who do not need to install Perl or understand the application’s dependencies.&lt;br /&gt;
&lt;br /&gt;
That final point is essential. The Perl programmer may know that the application depends upon Strawberry Perl, wxPerl, wxWidgets, CPAN modules, native DLLs, and packaging tools. The user should ordinarily experience only a Windows application which installs and runs in the expected way.&lt;br /&gt;
&lt;br /&gt;
Readers who want to examine earlier tools and historical attempts at wxWidgets rapid application development in Perl may also consult [[Perl and wxWidgets RAD on Windows]].&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
== The craft and the virtue ==&lt;br /&gt;
&lt;br /&gt;
The virtues themselves are discussed elsewhere on Perl Guilds. Here our concern is how they direct the work at hand.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Practical wisdom, or prudence, not laziness&#039;&#039;&#039; asks the craftsman to choose tools and markets according to the work which genuinely needs to be done.&lt;br /&gt;
&lt;br /&gt;
For the weary journeyman or master, prudence may require learning a new part of the trade rather than endlessly repeating familiar server-side work. Existing Perl experience is not discarded. It is redirected and extended.&lt;br /&gt;
&lt;br /&gt;
For the apprentice, prudence means refusing the temptation to skip directly to a polished commercial product without first learning the underlying tools and workflow.&lt;br /&gt;
&lt;br /&gt;
Automation does not eliminate the importance of labor. All earthly value is created by human labor. A tool preserves earlier labor and allows new labor to be applied more effectively, but the tool does not recognize the user&#039;s need, exercise judgment, accept responsibility, or provide service by itself.&lt;br /&gt;
&lt;br /&gt;
The aim of the virtuous programmer is therefore not to avoid work. It is to avoid wasting work.&lt;br /&gt;
&lt;br /&gt;
A repeatable installation procedure preserves labor.&lt;br /&gt;
&lt;br /&gt;
A visual GUI builder reduces unnecessary mechanical effort.&lt;br /&gt;
&lt;br /&gt;
Reusable Perl modules preserve tested knowledge.&lt;br /&gt;
&lt;br /&gt;
An installer saves every user from recreating the developer&#039;s environment.&lt;br /&gt;
&lt;br /&gt;
Backward compatibility protects work already performed by programmers and users.&lt;br /&gt;
&lt;br /&gt;
Good tools allow the craftsman to direct more effort toward understanding the user and completing the work.&lt;br /&gt;
&lt;br /&gt;
== At the workbench: propose a masterwork ==&lt;br /&gt;
&lt;br /&gt;
Before installing anything, describe one possible application.&lt;br /&gt;
&lt;br /&gt;
Write down:&lt;br /&gt;
&lt;br /&gt;
# Who will use it?&lt;br /&gt;
# What work are they doing now?&lt;br /&gt;
# What part of that work belongs on the desktop?&lt;br /&gt;
# What part, if any, belongs on a Perl-powered server?&lt;br /&gt;
# What files or data will the user provide?&lt;br /&gt;
# What result will the application produce?&lt;br /&gt;
# What is the smallest version that would be genuinely useful?&lt;br /&gt;
# Why would someone install it?&lt;br /&gt;
# Why might someone reasonably pay for it?&lt;br /&gt;
# What responsibility will you accept after delivering it?&lt;br /&gt;
# Could an apprentice learn something by helping with it?&lt;br /&gt;
# Could the application remain useful for five or ten years?&lt;br /&gt;
&lt;br /&gt;
The proposal need not describe a large product. A narrow tool completed well is a better masterwork than an ambitious system which never leaves the developer&#039;s computer.&lt;br /&gt;
&lt;br /&gt;
== Continue the journey ==&lt;br /&gt;
&lt;br /&gt;
The next essay, [[The Perl Lazarus Workshop]], examines the tools selected for this work: Strawberry Perl, wxWidgets, wxPerl, wxGlade, MSYS2, PAR-based packaging, and Inno Setup.&lt;br /&gt;
&lt;br /&gt;
The purpose will not be to present a random collection of software. It will be to understand how each tool contributes to one coherent craftsman&#039;s workshop, and how the labor embodied in these tools allows a Perl programmer to perform new work of his own.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Perl Craftsman Returns to the Windows Desktop}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Series:&#039;&#039;&#039; [[Portal:Essays about The Virtuous Perl Programmer|Essays about The Virtuous Perl Programmer]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Next essay:&#039;&#039;&#039; [[The Perl Lazarus Workshop]]&lt;br /&gt;
&lt;br /&gt;
[[Category:The Virtuous Perl Programmer]]&lt;br /&gt;
[[Category:Perl Lazarus Project]]&lt;br /&gt;
[[Category:wxPerl]]&lt;br /&gt;
[[Category:Perl Guilds]]&lt;br /&gt;
[[Category:Windows]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=The_Perl_Craftsman_Returns_to_the_Windows_Desktop&amp;diff=369</id>
		<title>The Perl Craftsman Returns to the Windows Desktop</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=The_Perl_Craftsman_Returns_to_the_Windows_Desktop&amp;diff=369"/>
		<updated>2026-07-19T21:06:46Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* The Perl Lazarus journey */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:The Perl Craftsman Returns to the Windows Desktop}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This is the first essay in the series [[Portal:Essays about The Virtuous Perl Programmer|Essays about The Virtuous Perl Programmer]]. The series follows the practical journey from Perl programmer to craftsman of complete, distributable Windows applications.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
There comes a point in the life of a programmer when experience can become strangely tiring.&lt;br /&gt;
&lt;br /&gt;
The journeyman Perl programmer may have crossed many territories. He has repaired old systems, migrated databases, parsed uncooperative data, automated jobs, maintained web applications, connected APIs, managed servers, and rescued programs whose original authors disappeared years ago. He may have spent decades learning that the apparently simple problem is rarely simple, that data supplied by users never quite resembles the example, and that the machine which fails is usually not the machine on which the software was developed.&lt;br /&gt;
&lt;br /&gt;
The master Perl programmer may have done all of this while teaching others, supporting clients, maintaining community infrastructure, and carrying responsibility for systems which cannot simply be turned off and rewritten in the fashionable language of the year.&lt;br /&gt;
&lt;br /&gt;
Such a programmer is not obsolete. He may only be weary.&lt;br /&gt;
&lt;br /&gt;
The repeated announcement of Perl&#039;s death can become tiresome. So can working continually behind the scenes while newer communities rediscover techniques that Perl programmers have practiced for decades. The experienced Perl programmer may understandably ask whether there is any new territory worth crossing, or whether his remaining work consists only of maintaining what other people have abandoned.&lt;br /&gt;
&lt;br /&gt;
At the same time, a newer programmer may sit in front of a Windows computer and never encounter Perl at all. He may know that programs come from an application store, a game launcher, a download page, or a Git repository, but not yet understand that he can create those programs himself. He may be experimenting with game modifications, running a private server, editing configuration files, automating a repetitive task, or wondering how a favorite program works.&lt;br /&gt;
&lt;br /&gt;
He may, quite literally, be playing video games.&lt;br /&gt;
&lt;br /&gt;
This series is addressed to both programmers: the experienced craftsman who may need a new application for an old and powerful trade, and the prospective apprentice who has not yet discovered that programming can become his own craft.&lt;br /&gt;
&lt;br /&gt;
== The programmer as craftsman ==&lt;br /&gt;
&lt;br /&gt;
The language of the craftsman is useful because programming is not merely the manipulation of symbols. It is the application of knowledge, judgment, practiced skill, and responsibility to a human need.&lt;br /&gt;
&lt;br /&gt;
The traditional progression from apprentice to journeyman to master should not be treated as a rigid credentialing system or as an excuse for excluding newcomers. It is a way of describing growth within a trade.&lt;br /&gt;
&lt;br /&gt;
* The &#039;&#039;&#039;apprentice&#039;&#039;&#039; learns the tools, vocabulary, habits, and established practices of the craft.&lt;br /&gt;
* The &#039;&#039;&#039;journeyman&#039;&#039;&#039; can travel beyond the workshop in which he first learned and apply his skills to unfamiliar problems.&lt;br /&gt;
* The &#039;&#039;&#039;master&#039;&#039;&#039; accepts responsibility for complete work, judges its quality, serves customers, preserves knowledge, and helps form other craftsmen.&lt;br /&gt;
&lt;br /&gt;
A journeyman is not merely someone who has memorized more syntax than an apprentice. He has learned how to proceed when the documentation is incomplete, the operating environment is unfamiliar, and the first solution does not work.&lt;br /&gt;
&lt;br /&gt;
A master is not someone who has stopped learning. He is someone whose experience has taught him the weight of a promise. When he says that a program can be installed, can preserve a user&#039;s data, or can be supported in a particular environment, he understands that another person&#039;s work may depend upon that claim.&lt;br /&gt;
&lt;br /&gt;
A masterwork is therefore not merely a clever algorithm, an ingenious regular expression, or an impressive piece of code. It is work brought to completion.&lt;br /&gt;
&lt;br /&gt;
For a Windows desktop application, that completion may include:&lt;br /&gt;
&lt;br /&gt;
* a useful and understandable graphical interface;&lt;br /&gt;
* dependable handling of files and data;&lt;br /&gt;
* communication with an existing Perl web service;&lt;br /&gt;
* a Windows executable;&lt;br /&gt;
* a familiar installer;&lt;br /&gt;
* useful documentation;&lt;br /&gt;
* testing on a computer other than the developer&#039;s;&lt;br /&gt;
* a reasonable upgrade and uninstallation path;&lt;br /&gt;
* and a plan for supporting the people who use it.&lt;br /&gt;
&lt;br /&gt;
The purpose of [[Main Page|Perl Guilds]] is to encourage this fuller understanding of the programmer&#039;s trade: independent programmers sharing knowledge, cultivating practical specialties, forming one another in the craft, and helping one another earn a living through useful work.&lt;br /&gt;
&lt;br /&gt;
== An invitation to the weary journeyman ==&lt;br /&gt;
&lt;br /&gt;
The experienced Perl programmer already possesses much of what is needed to build a valuable desktop application.&lt;br /&gt;
&lt;br /&gt;
He may know how to:&lt;br /&gt;
&lt;br /&gt;
* validate and transform data;&lt;br /&gt;
* communicate with databases;&lt;br /&gt;
* consume and publish APIs;&lt;br /&gt;
* process text, images, or scientific data;&lt;br /&gt;
* operate remote services;&lt;br /&gt;
* automate complex workflows;&lt;br /&gt;
* authenticate users;&lt;br /&gt;
* generate reports;&lt;br /&gt;
* maintain compatibility;&lt;br /&gt;
* and diagnose failures in production.&lt;br /&gt;
&lt;br /&gt;
These abilities do not become irrelevant when a graphical interface is added. They become the substance behind the interface.&lt;br /&gt;
&lt;br /&gt;
The desktop is not a repudiation of the server work in which Perl programmers have excelled. It is another point at which that work can be placed into the hands of a user.&lt;br /&gt;
&lt;br /&gt;
A Perl programmer who has spent years building web applications may create a Windows client for one of those applications. A systems programmer may create an administrative console. A scientific programmer may package a model or data-analysis workflow for colleagues who will never use a command line. A collector, historian, translator, accountant, engineer, or small-business owner may need a specialized application that no large software company would consider profitable enough to build.&lt;br /&gt;
&lt;br /&gt;
The weary journeyman need not begin again as though his past experience counted for nothing. He must learn a new portion of the trade, but he brings his existing judgment with him.&lt;br /&gt;
&lt;br /&gt;
Perl is not the obstacle. Perl is the leverage.&lt;br /&gt;
&lt;br /&gt;
== An invitation to the future apprentice ==&lt;br /&gt;
&lt;br /&gt;
Perl also needs new programmers, and many potential programmers are sitting in front of Windows computers right now.&lt;br /&gt;
&lt;br /&gt;
It would be impossible to count all future programmers before they discover the craft. We can, however, observe where ordinary desktop users are. Windows remains the largest desktop operating-system family in worldwide usage measurements.&amp;lt;ref&amp;gt;[https://gs.statcounter.com/os-market-share/desktop/ StatCounter Global Stats, “Desktop Operating System Market Share Worldwide”]&amp;lt;/ref&amp;gt; It also remains the overwhelmingly prevalent operating-system environment among people participating in the Steam hardware survey.&amp;lt;ref&amp;gt;[https://store.steampowered.com/hwsurvey/ Valve, “Steam Hardware &amp;amp; Software Survey”]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Many of these users are playing games, installing modifications, running Discord communities, hosting servers, editing files, experimenting with hardware, or trying to automate some irritating part of their digital lives. These activities are not programming apprenticeships by themselves, but they are often close to the doorway.&lt;br /&gt;
&lt;br /&gt;
A person who asks, “Can I change how this game behaves?” is already asking a programmer&#039;s question.&lt;br /&gt;
&lt;br /&gt;
A person who runs a private game server has begun to encounter networking, configuration, permissions, logs, and failure recovery.&lt;br /&gt;
&lt;br /&gt;
A person who writes a small script to rename files or process game data has begun to discover that the computer can be instructed rather than merely consumed.&lt;br /&gt;
&lt;br /&gt;
If Perl wishes to recruit another generation, Perl programmers must be willing to meet prospective programmers where they are. That includes Windows.&lt;br /&gt;
&lt;br /&gt;
It is not enough to tell a Windows user that serious programmers eventually abandon his environment. It is better to show him that the computer he already owns can become a workshop; that Strawberry Perl gives him a native Perl environment; that wxPerl can create real graphical applications; and that the same language can later take him into web services, databases, systems work, scientific computing, and many other fields.&lt;br /&gt;
&lt;br /&gt;
The route into the craft should not require the apprentice first to adopt the operating-system preferences of the master.&lt;br /&gt;
&lt;br /&gt;
== Why return to the desktop? ==&lt;br /&gt;
&lt;br /&gt;
Perl programmers have long been especially effective behind the scenes.&lt;br /&gt;
&lt;br /&gt;
Perl may collect the data, operate the website, maintain the database, run the scientific model, communicate with an outside service, or generate the report. The ordinary user may benefit from all of this without ever seeing Perl directly.&lt;br /&gt;
&lt;br /&gt;
That is not a defect. Invisible infrastructure is often excellent work.&lt;br /&gt;
&lt;br /&gt;
Nevertheless, the Windows desktop offers another place for the Perl craftsman to practice his trade: directly in front of the person whose work the software is intended to serve.&lt;br /&gt;
&lt;br /&gt;
A desktop application may:&lt;br /&gt;
&lt;br /&gt;
* organize files already stored on the user&#039;s computer;&lt;br /&gt;
* provide a specialized editor or research interface;&lt;br /&gt;
* display data from a remote Perl application;&lt;br /&gt;
* upload images or documents for server-side processing;&lt;br /&gt;
* present results from a database or API;&lt;br /&gt;
* allow local work when the network is unavailable;&lt;br /&gt;
* interact with devices or applications installed on the computer;&lt;br /&gt;
* or provide a richer companion to an existing website.&lt;br /&gt;
&lt;br /&gt;
A service such as [https://boyscoutpatch.info/ BoyScoutPatch.info], for example, may continue to perform centralized work for which a web application is well suited, while a desktop client could provide a more specialized workflow for collectors, researchers, or administrators.&lt;br /&gt;
&lt;br /&gt;
This is an application of subsidiarity. The server should perform work which genuinely belongs on the server. The desktop should perform work which is best placed in the user&#039;s hands.&lt;br /&gt;
&lt;br /&gt;
The objective is not to replace every web application with a desktop program. It is to place each responsibility where it can be performed most effectively, while avoiding needless centralization and needless dependence upon a permanent network connection.&lt;br /&gt;
&lt;br /&gt;
== Why Windows? ==&lt;br /&gt;
&lt;br /&gt;
This series deliberately focuses on Windows.&lt;br /&gt;
&lt;br /&gt;
That does not imply that Windows is the only worthy platform, or that wxPerl cannot be useful elsewhere. It means that a craftsman must eventually choose a definite workshop and a definite group of users.&lt;br /&gt;
&lt;br /&gt;
Windows offers several practical advantages for this undertaking.&lt;br /&gt;
&lt;br /&gt;
First, Windows has a very large population of ordinary desktop users. That population includes customers, office workers, researchers, collectors, students, gamers, and prospective programmers.&lt;br /&gt;
&lt;br /&gt;
Second, specialized commercial desktop software is familiar on Windows. Users understand the idea of downloading an application, running an installer, finding the program in the Start menu, and paying for a tool which performs useful work.&lt;br /&gt;
&lt;br /&gt;
Third, Windows is unusually committed to backward application compatibility. Microsoft states that it goes to great lengths to maintain application and device compatibility across operating-system version changes, especially for ordinary applications without kernel dependencies.&amp;lt;ref&amp;gt;[https://learn.microsoft.com/en-us/windows/compatibility/windows-version-check Microsoft Learn, “Windows version check”]&amp;lt;/ref&amp;gt; Windows application manifests even allow newer versions of Windows to preserve behaviors expected by applications targeting older releases.&amp;lt;ref&amp;gt;[https://learn.microsoft.com/en-us/windows/compatibility/application-executable-manifest Microsoft Learn, “App executable manifest”]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No compatibility promise is absolute. Security changes, removed components, architecture changes, obsolete drivers, and undocumented assumptions can still break old programs. Nevertheless, Windows demonstrates an unusually strong expectation that software written for an earlier generation should continue to function.&lt;br /&gt;
&lt;br /&gt;
That expectation matters to the independent craftsman.&lt;br /&gt;
&lt;br /&gt;
A specialized application may serve a modest community for many years. Its value may come from stability rather than constant reinvention. A program which continues working through several generations of hardware and operating systems can repay its development cost many times over.&lt;br /&gt;
&lt;br /&gt;
Perl&#039;s own concern for compatibility belongs naturally in such an environment. Experiments with ActivePerl 5.8.8 on Windows 98 illustrate the extraordinary historical reach of both ecosystems. That does not mean new commercial software should target Windows 98. It means the craftsman should recognize the strategic value of technologies which respect existing work.&lt;br /&gt;
&lt;br /&gt;
Fourth, Strawberry Perl provides a serious native Windows Perl environment. It includes Perl, a compiler, build utilities, and access to the CPAN ecosystem. The Windows programmer is not confined to a toy interpreter or an imitation of a Unix system.&lt;br /&gt;
&lt;br /&gt;
Finally, many Perl programmers already use Windows as a daily working environment, and many possible new Perl programmers begin there.&lt;br /&gt;
&lt;br /&gt;
The choice is therefore practical rather than ideological.&lt;br /&gt;
&lt;br /&gt;
The question is not, “Which operating system proves that I am a proper programmer?”&lt;br /&gt;
&lt;br /&gt;
The question is, “Where can existing Perl knowledge be turned into useful software, and where can new craftsmen be invited into the trade?”&lt;br /&gt;
&lt;br /&gt;
== Extreme compatibility creates an opportunity ==&lt;br /&gt;
&lt;br /&gt;
Windows&#039; backward compatibility does more than preserve old software. It encourages a particular kind of small-scale production.&lt;br /&gt;
&lt;br /&gt;
A large vendor may prefer subscriptions, rapid replacement, cloud dependence, and frequent redesign. An independent craftsman may instead produce a focused application which performs one job well and continues doing it for a long time.&lt;br /&gt;
&lt;br /&gt;
That application might serve only a few hundred users. It might serve a laboratory, a local company, a collecting community, a nonprofit, or a narrow professional field. Its market may be too small for a major software firm but large enough to support the person who understands the problem.&lt;br /&gt;
&lt;br /&gt;
Long-lived desktop software also creates continuing forms of useful labor:&lt;br /&gt;
&lt;br /&gt;
* installation;&lt;br /&gt;
* customization;&lt;br /&gt;
* data conversion;&lt;br /&gt;
* training;&lt;br /&gt;
* compatibility maintenance;&lt;br /&gt;
* support;&lt;br /&gt;
* integration with newer services;&lt;br /&gt;
* and carefully managed upgrades.&lt;br /&gt;
&lt;br /&gt;
Backward compatibility does not eliminate this labor. It gives the labor a durable foundation.&lt;br /&gt;
&lt;br /&gt;
The programmer can improve the application without forcing every user to abandon previous work. The user can invest time learning a tool with some confidence that the tool will not disappear merely because an investor has changed direction.&lt;br /&gt;
&lt;br /&gt;
This relationship between craftsman and user is especially important in a guild-minded approach to software. The programmer is not merely attempting to capture attention. He is accepting responsibility for an instrument another person may use in his own work.&lt;br /&gt;
&lt;br /&gt;
== From a working script to a Windows product ==&lt;br /&gt;
&lt;br /&gt;
A Perl script and a Windows product may contain the same essential program logic, but the user&#039;s experience is very different.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ From the developer&#039;s program to the user&#039;s product&lt;br /&gt;
! The developer may have&lt;br /&gt;
! The Windows user reasonably expects&lt;br /&gt;
|-&lt;br /&gt;
| A &amp;lt;code&amp;gt;.pl&amp;lt;/code&amp;gt; file&lt;br /&gt;
| An application that starts from an icon&lt;br /&gt;
|-&lt;br /&gt;
| Installed CPAN modules&lt;br /&gt;
| No requirement to install Perl or dependencies&lt;br /&gt;
|-&lt;br /&gt;
| Commands entered in a terminal&lt;br /&gt;
| A graphical interface&lt;br /&gt;
|-&lt;br /&gt;
| Paths that work on the development computer&lt;br /&gt;
| Correct installation and user-data directories&lt;br /&gt;
|-&lt;br /&gt;
| Diagnostic output in a console&lt;br /&gt;
| Understandable errors and useful logs&lt;br /&gt;
|-&lt;br /&gt;
| A program that works in the workshop&lt;br /&gt;
| A program that works on the user&#039;s computer&lt;br /&gt;
|-&lt;br /&gt;
| A collection of build commands&lt;br /&gt;
| A repeatable installer and upgrade procedure&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The difficult question is therefore not merely whether Perl can display a graphical window. It can.&lt;br /&gt;
&lt;br /&gt;
The difficult question is whether we can establish a clear and repeatable path from the Perl programmer&#039;s existing skills to software which an ordinary Windows user can install and use.&lt;br /&gt;
&lt;br /&gt;
That is the purpose of the [[Developing and Distributing wxPerl Applications on Windows|Perl Lazarus Project&#039;s documented Windows workflow]].&lt;br /&gt;
&lt;br /&gt;
== The Perl Lazarus journey ==&lt;br /&gt;
&lt;br /&gt;
[[File:perl-lazarus-project-workflow.png&lt;br /&gt;
 |thumb&lt;br /&gt;
 |right&lt;br /&gt;
 |420px&lt;br /&gt;
 |alt=Six-stage Perl Lazarus Project workflow from installing the development stack through testing the finished Windows application&lt;br /&gt;
 |The Perl Lazarus Project follows a complete path: install the stack, design the GUI, write the Perl code, package the executable, build the installer, and test the result on Windows.&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
The Perl Lazarus Project builds upon the renewed wxPerl work associated with Johan Vromans and others in the wxPerl community.&amp;lt;ref&amp;gt;[https://dev.to/sciurius/wxperl-revival-5fde Johan Vromans, “wxPerl Revival”]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Its name also acknowledges the example of the [https://www.lazarus-ide.org/ Lazarus IDE and Free Pascal community]. Lazarus demonstrates what can happen when a programming community joins a language, a visual designer, components, documentation, packaging practices, and an economy of books, support, consulting, and application development.&lt;br /&gt;
&lt;br /&gt;
Perl does not necessarily need a single enormous Lazarus-like IDE. It needs a clear path which craftsmen can follow:&lt;br /&gt;
&lt;br /&gt;
# Install a known working development stack.&lt;br /&gt;
# Design the interface.&lt;br /&gt;
# Generate and write Perl code.&lt;br /&gt;
# Package the application as an executable.&lt;br /&gt;
# Build a Windows installer.&lt;br /&gt;
# Test the installed program on a clean Windows system.&lt;br /&gt;
&lt;br /&gt;
The significance of this path is not that any individual step is unknown. Perl already has a native Windows distribution, graphical bindings, interface-design tools, packaging modules, and installer technology. The missing element has been a coherent and repeatable journey connecting them.&lt;br /&gt;
&lt;br /&gt;
The present stack joins Strawberry Perl, wxWidgets, wxPerl, wxGlade, PAR-based packaging tools, and Inno Setup. The next essay, [[The Perl Lazarus Workshop]], will explain why these tools belong together and what role each one performs in the craftsman’s workshop.&lt;br /&gt;
&lt;br /&gt;
The series will then proceed through installation, visual design, the wxGlade-to-Perl development cycle, application structure, local data, communication with Perl web services, executable creation, installer construction, testing, and support.&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
[[File:nhc-advisory-explorer-windows.png&lt;br /&gt;
 |thumb&lt;br /&gt;
 |left&lt;br /&gt;
 |380px&lt;br /&gt;
 |alt=NHC Advisory Explorer running as a packaged Windows desktop application&lt;br /&gt;
 |The NHC Advisory Explorer demonstrates the practical result: a wxPerl program packaged for ordinary Windows users.&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
This is not merely a theoretical possibility. The [https://github.com/StormSurgeLive/nhc-advisory-gui NHC Advisory Explorer] is one example of a wxPerl program packaged for Windows users.&amp;lt;ref&amp;gt;[https://github.com/StormSurgeLive/nhc-advisory-gui StormSurgeLive, “NHC Advisory Explorer”]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The program retrieves and presents National Hurricane Center advisory information through a familiar desktop interface. More importantly for this series, it demonstrates that the complete path can be followed: a Perl application can be given a graphical interface, packaged as a Windows executable, placed into an installer, and distributed to users who do not need to install Perl or understand the application’s dependencies.&lt;br /&gt;
&lt;br /&gt;
That final point is essential. The Perl programmer may know that the application depends upon Strawberry Perl, wxPerl, wxWidgets, CPAN modules, native DLLs, and packaging tools. The user should ordinarily experience only a Windows application which installs and runs in the expected way.&lt;br /&gt;
&lt;br /&gt;
Readers who want to examine earlier tools and historical attempts at wxWidgets rapid application development in Perl may also consult [[Perl and wxWidgets RAD on Windows]].&lt;br /&gt;
&lt;br /&gt;
{{clear}}&lt;br /&gt;
&lt;br /&gt;
== The craft and the virtue ==&lt;br /&gt;
&lt;br /&gt;
The virtues themselves are discussed elsewhere on Perl Guilds. Here our concern is how they direct the work at hand.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Practical wisdom, or prudence, not laziness&#039;&#039;&#039; asks the craftsman to choose tools and markets according to the work which genuinely needs to be done.&lt;br /&gt;
&lt;br /&gt;
For the weary journeyman or master, prudence may require learning a new part of the trade rather than endlessly repeating familiar server-side work. Existing Perl experience is not discarded. It is redirected and extended.&lt;br /&gt;
&lt;br /&gt;
For the apprentice, prudence means refusing the temptation to skip directly to a polished commercial product without first learning the underlying tools and workflow.&lt;br /&gt;
&lt;br /&gt;
Automation does not eliminate the importance of labor. All earthly value is created by human labor. A tool preserves earlier labor and allows new labor to be applied more effectively, but the tool does not recognize the user&#039;s need, exercise judgment, accept responsibility, or provide service by itself.&lt;br /&gt;
&lt;br /&gt;
The aim of the virtuous programmer is therefore not to avoid work. It is to avoid wasting work.&lt;br /&gt;
&lt;br /&gt;
A repeatable installation procedure preserves labor.&lt;br /&gt;
&lt;br /&gt;
A visual GUI builder reduces unnecessary mechanical effort.&lt;br /&gt;
&lt;br /&gt;
Reusable Perl modules preserve tested knowledge.&lt;br /&gt;
&lt;br /&gt;
An installer saves every user from recreating the developer&#039;s environment.&lt;br /&gt;
&lt;br /&gt;
Backward compatibility protects work already performed by programmers and users.&lt;br /&gt;
&lt;br /&gt;
Good tools allow the craftsman to direct more effort toward understanding the user and completing the work.&lt;br /&gt;
&lt;br /&gt;
== At the workbench: propose a masterwork ==&lt;br /&gt;
&lt;br /&gt;
Before installing anything, describe one possible application.&lt;br /&gt;
&lt;br /&gt;
Write down:&lt;br /&gt;
&lt;br /&gt;
# Who will use it?&lt;br /&gt;
# What work are they doing now?&lt;br /&gt;
# What part of that work belongs on the desktop?&lt;br /&gt;
# What part, if any, belongs on a Perl-powered server?&lt;br /&gt;
# What files or data will the user provide?&lt;br /&gt;
# What result will the application produce?&lt;br /&gt;
# What is the smallest version that would be genuinely useful?&lt;br /&gt;
# Why would someone install it?&lt;br /&gt;
# Why might someone reasonably pay for it?&lt;br /&gt;
# What responsibility will you accept after delivering it?&lt;br /&gt;
# Could an apprentice learn something by helping with it?&lt;br /&gt;
# Could the application remain useful for five or ten years?&lt;br /&gt;
&lt;br /&gt;
The proposal need not describe a large product. A narrow tool completed well is a better masterwork than an ambitious system which never leaves the developer&#039;s computer.&lt;br /&gt;
&lt;br /&gt;
== Continue the journey ==&lt;br /&gt;
&lt;br /&gt;
The next essay, [[The Perl Lazarus Workshop]], examines the tools selected for this work: Strawberry Perl, wxWidgets, wxPerl, wxGlade, MSYS2, PAR-based packaging, and Inno Setup.&lt;br /&gt;
&lt;br /&gt;
The purpose will not be to present a random collection of software. It will be to understand how each tool contributes to one coherent craftsman&#039;s workshop, and how the labor embodied in these tools allows a Perl programmer to perform new work of his own.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Perl Craftsman Returns to the Windows Desktop}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Series:&#039;&#039;&#039; [[Portal:Essays about The Virtuous Perl Programmer|Essays about The Virtuous Perl Programmer]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Next essay:&#039;&#039;&#039; [[The Perl Lazarus Workshop]]&lt;br /&gt;
&lt;br /&gt;
[[Category:The Virtuous Perl Programmer]]&lt;br /&gt;
[[Category:Perl Lazarus Project]]&lt;br /&gt;
[[Category:wxPerl]]&lt;br /&gt;
[[Category:Perl Guilds]]&lt;br /&gt;
[[Category:Windows]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=File:Nhc-advisory-explorer-windows.png&amp;diff=368</id>
		<title>File:Nhc-advisory-explorer-windows.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=File:Nhc-advisory-explorer-windows.png&amp;diff=368"/>
		<updated>2026-07-19T21:04:34Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=File:Perl-lazarus-project-workflow.png&amp;diff=367</id>
		<title>File:Perl-lazarus-project-workflow.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=File:Perl-lazarus-project-workflow.png&amp;diff=367"/>
		<updated>2026-07-19T21:04:01Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=The_Perl_Craftsman_Returns_to_the_Windows_Desktop&amp;diff=366</id>
		<title>The Perl Craftsman Returns to the Windows Desktop</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=The_Perl_Craftsman_Returns_to_the_Windows_Desktop&amp;diff=366"/>
		<updated>2026-07-19T20:55:24Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:The Perl Craftsman Returns to the Windows Desktop}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This is the first essay in the series [[Portal:Essays about The Virtuous Perl Programmer|Essays about The Virtuous Perl Programmer]]. The series follows the practical journey from Perl programmer to craftsman of complete, distributable Windows applications.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
There comes a point in the life of a programmer when experience can become strangely tiring.&lt;br /&gt;
&lt;br /&gt;
The journeyman Perl programmer may have crossed many territories. He has repaired old systems, migrated databases, parsed uncooperative data, automated jobs, maintained web applications, connected APIs, managed servers, and rescued programs whose original authors disappeared years ago. He may have spent decades learning that the apparently simple problem is rarely simple, that data supplied by users never quite resembles the example, and that the machine which fails is usually not the machine on which the software was developed.&lt;br /&gt;
&lt;br /&gt;
The master Perl programmer may have done all of this while teaching others, supporting clients, maintaining community infrastructure, and carrying responsibility for systems which cannot simply be turned off and rewritten in the fashionable language of the year.&lt;br /&gt;
&lt;br /&gt;
Such a programmer is not obsolete. He may only be weary.&lt;br /&gt;
&lt;br /&gt;
The repeated announcement of Perl&#039;s death can become tiresome. So can working continually behind the scenes while newer communities rediscover techniques that Perl programmers have practiced for decades. The experienced Perl programmer may understandably ask whether there is any new territory worth crossing, or whether his remaining work consists only of maintaining what other people have abandoned.&lt;br /&gt;
&lt;br /&gt;
At the same time, a newer programmer may sit in front of a Windows computer and never encounter Perl at all. He may know that programs come from an application store, a game launcher, a download page, or a Git repository, but not yet understand that he can create those programs himself. He may be experimenting with game modifications, running a private server, editing configuration files, automating a repetitive task, or wondering how a favorite program works.&lt;br /&gt;
&lt;br /&gt;
He may, quite literally, be playing video games.&lt;br /&gt;
&lt;br /&gt;
This series is addressed to both programmers: the experienced craftsman who may need a new application for an old and powerful trade, and the prospective apprentice who has not yet discovered that programming can become his own craft.&lt;br /&gt;
&lt;br /&gt;
== The programmer as craftsman ==&lt;br /&gt;
&lt;br /&gt;
The language of the craftsman is useful because programming is not merely the manipulation of symbols. It is the application of knowledge, judgment, practiced skill, and responsibility to a human need.&lt;br /&gt;
&lt;br /&gt;
The traditional progression from apprentice to journeyman to master should not be treated as a rigid credentialing system or as an excuse for excluding newcomers. It is a way of describing growth within a trade.&lt;br /&gt;
&lt;br /&gt;
* The &#039;&#039;&#039;apprentice&#039;&#039;&#039; learns the tools, vocabulary, habits, and established practices of the craft.&lt;br /&gt;
* The &#039;&#039;&#039;journeyman&#039;&#039;&#039; can travel beyond the workshop in which he first learned and apply his skills to unfamiliar problems.&lt;br /&gt;
* The &#039;&#039;&#039;master&#039;&#039;&#039; accepts responsibility for complete work, judges its quality, serves customers, preserves knowledge, and helps form other craftsmen.&lt;br /&gt;
&lt;br /&gt;
A journeyman is not merely someone who has memorized more syntax than an apprentice. He has learned how to proceed when the documentation is incomplete, the operating environment is unfamiliar, and the first solution does not work.&lt;br /&gt;
&lt;br /&gt;
A master is not someone who has stopped learning. He is someone whose experience has taught him the weight of a promise. When he says that a program can be installed, can preserve a user&#039;s data, or can be supported in a particular environment, he understands that another person&#039;s work may depend upon that claim.&lt;br /&gt;
&lt;br /&gt;
A masterwork is therefore not merely a clever algorithm, an ingenious regular expression, or an impressive piece of code. It is work brought to completion.&lt;br /&gt;
&lt;br /&gt;
For a Windows desktop application, that completion may include:&lt;br /&gt;
&lt;br /&gt;
* a useful and understandable graphical interface;&lt;br /&gt;
* dependable handling of files and data;&lt;br /&gt;
* communication with an existing Perl web service;&lt;br /&gt;
* a Windows executable;&lt;br /&gt;
* a familiar installer;&lt;br /&gt;
* useful documentation;&lt;br /&gt;
* testing on a computer other than the developer&#039;s;&lt;br /&gt;
* a reasonable upgrade and uninstallation path;&lt;br /&gt;
* and a plan for supporting the people who use it.&lt;br /&gt;
&lt;br /&gt;
The purpose of [[Main Page|Perl Guilds]] is to encourage this fuller understanding of the programmer&#039;s trade: independent programmers sharing knowledge, cultivating practical specialties, forming one another in the craft, and helping one another earn a living through useful work.&lt;br /&gt;
&lt;br /&gt;
== An invitation to the weary journeyman ==&lt;br /&gt;
&lt;br /&gt;
The experienced Perl programmer already possesses much of what is needed to build a valuable desktop application.&lt;br /&gt;
&lt;br /&gt;
He may know how to:&lt;br /&gt;
&lt;br /&gt;
* validate and transform data;&lt;br /&gt;
* communicate with databases;&lt;br /&gt;
* consume and publish APIs;&lt;br /&gt;
* process text, images, or scientific data;&lt;br /&gt;
* operate remote services;&lt;br /&gt;
* automate complex workflows;&lt;br /&gt;
* authenticate users;&lt;br /&gt;
* generate reports;&lt;br /&gt;
* maintain compatibility;&lt;br /&gt;
* and diagnose failures in production.&lt;br /&gt;
&lt;br /&gt;
These abilities do not become irrelevant when a graphical interface is added. They become the substance behind the interface.&lt;br /&gt;
&lt;br /&gt;
The desktop is not a repudiation of the server work in which Perl programmers have excelled. It is another point at which that work can be placed into the hands of a user.&lt;br /&gt;
&lt;br /&gt;
A Perl programmer who has spent years building web applications may create a Windows client for one of those applications. A systems programmer may create an administrative console. A scientific programmer may package a model or data-analysis workflow for colleagues who will never use a command line. A collector, historian, translator, accountant, engineer, or small-business owner may need a specialized application that no large software company would consider profitable enough to build.&lt;br /&gt;
&lt;br /&gt;
The weary journeyman need not begin again as though his past experience counted for nothing. He must learn a new portion of the trade, but he brings his existing judgment with him.&lt;br /&gt;
&lt;br /&gt;
Perl is not the obstacle. Perl is the leverage.&lt;br /&gt;
&lt;br /&gt;
== An invitation to the future apprentice ==&lt;br /&gt;
&lt;br /&gt;
Perl also needs new programmers, and many potential programmers are sitting in front of Windows computers right now.&lt;br /&gt;
&lt;br /&gt;
It would be impossible to count all future programmers before they discover the craft. We can, however, observe where ordinary desktop users are. Windows remains the largest desktop operating-system family in worldwide usage measurements.&amp;lt;ref&amp;gt;[https://gs.statcounter.com/os-market-share/desktop/ StatCounter Global Stats, “Desktop Operating System Market Share Worldwide”]&amp;lt;/ref&amp;gt; It also remains the overwhelmingly prevalent operating-system environment among people participating in the Steam hardware survey.&amp;lt;ref&amp;gt;[https://store.steampowered.com/hwsurvey/ Valve, “Steam Hardware &amp;amp; Software Survey”]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Many of these users are playing games, installing modifications, running Discord communities, hosting servers, editing files, experimenting with hardware, or trying to automate some irritating part of their digital lives. These activities are not programming apprenticeships by themselves, but they are often close to the doorway.&lt;br /&gt;
&lt;br /&gt;
A person who asks, “Can I change how this game behaves?” is already asking a programmer&#039;s question.&lt;br /&gt;
&lt;br /&gt;
A person who runs a private game server has begun to encounter networking, configuration, permissions, logs, and failure recovery.&lt;br /&gt;
&lt;br /&gt;
A person who writes a small script to rename files or process game data has begun to discover that the computer can be instructed rather than merely consumed.&lt;br /&gt;
&lt;br /&gt;
If Perl wishes to recruit another generation, Perl programmers must be willing to meet prospective programmers where they are. That includes Windows.&lt;br /&gt;
&lt;br /&gt;
It is not enough to tell a Windows user that serious programmers eventually abandon his environment. It is better to show him that the computer he already owns can become a workshop; that Strawberry Perl gives him a native Perl environment; that wxPerl can create real graphical applications; and that the same language can later take him into web services, databases, systems work, scientific computing, and many other fields.&lt;br /&gt;
&lt;br /&gt;
The route into the craft should not require the apprentice first to adopt the operating-system preferences of the master.&lt;br /&gt;
&lt;br /&gt;
== Why return to the desktop? ==&lt;br /&gt;
&lt;br /&gt;
Perl programmers have long been especially effective behind the scenes.&lt;br /&gt;
&lt;br /&gt;
Perl may collect the data, operate the website, maintain the database, run the scientific model, communicate with an outside service, or generate the report. The ordinary user may benefit from all of this without ever seeing Perl directly.&lt;br /&gt;
&lt;br /&gt;
That is not a defect. Invisible infrastructure is often excellent work.&lt;br /&gt;
&lt;br /&gt;
Nevertheless, the Windows desktop offers another place for the Perl craftsman to practice his trade: directly in front of the person whose work the software is intended to serve.&lt;br /&gt;
&lt;br /&gt;
A desktop application may:&lt;br /&gt;
&lt;br /&gt;
* organize files already stored on the user&#039;s computer;&lt;br /&gt;
* provide a specialized editor or research interface;&lt;br /&gt;
* display data from a remote Perl application;&lt;br /&gt;
* upload images or documents for server-side processing;&lt;br /&gt;
* present results from a database or API;&lt;br /&gt;
* allow local work when the network is unavailable;&lt;br /&gt;
* interact with devices or applications installed on the computer;&lt;br /&gt;
* or provide a richer companion to an existing website.&lt;br /&gt;
&lt;br /&gt;
A service such as [https://boyscoutpatch.info/ BoyScoutPatch.info], for example, may continue to perform centralized work for which a web application is well suited, while a desktop client could provide a more specialized workflow for collectors, researchers, or administrators.&lt;br /&gt;
&lt;br /&gt;
This is an application of subsidiarity. The server should perform work which genuinely belongs on the server. The desktop should perform work which is best placed in the user&#039;s hands.&lt;br /&gt;
&lt;br /&gt;
The objective is not to replace every web application with a desktop program. It is to place each responsibility where it can be performed most effectively, while avoiding needless centralization and needless dependence upon a permanent network connection.&lt;br /&gt;
&lt;br /&gt;
== Why Windows? ==&lt;br /&gt;
&lt;br /&gt;
This series deliberately focuses on Windows.&lt;br /&gt;
&lt;br /&gt;
That does not imply that Windows is the only worthy platform, or that wxPerl cannot be useful elsewhere. It means that a craftsman must eventually choose a definite workshop and a definite group of users.&lt;br /&gt;
&lt;br /&gt;
Windows offers several practical advantages for this undertaking.&lt;br /&gt;
&lt;br /&gt;
First, Windows has a very large population of ordinary desktop users. That population includes customers, office workers, researchers, collectors, students, gamers, and prospective programmers.&lt;br /&gt;
&lt;br /&gt;
Second, specialized commercial desktop software is familiar on Windows. Users understand the idea of downloading an application, running an installer, finding the program in the Start menu, and paying for a tool which performs useful work.&lt;br /&gt;
&lt;br /&gt;
Third, Windows is unusually committed to backward application compatibility. Microsoft states that it goes to great lengths to maintain application and device compatibility across operating-system version changes, especially for ordinary applications without kernel dependencies.&amp;lt;ref&amp;gt;[https://learn.microsoft.com/en-us/windows/compatibility/windows-version-check Microsoft Learn, “Windows version check”]&amp;lt;/ref&amp;gt; Windows application manifests even allow newer versions of Windows to preserve behaviors expected by applications targeting older releases.&amp;lt;ref&amp;gt;[https://learn.microsoft.com/en-us/windows/compatibility/application-executable-manifest Microsoft Learn, “App executable manifest”]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No compatibility promise is absolute. Security changes, removed components, architecture changes, obsolete drivers, and undocumented assumptions can still break old programs. Nevertheless, Windows demonstrates an unusually strong expectation that software written for an earlier generation should continue to function.&lt;br /&gt;
&lt;br /&gt;
That expectation matters to the independent craftsman.&lt;br /&gt;
&lt;br /&gt;
A specialized application may serve a modest community for many years. Its value may come from stability rather than constant reinvention. A program which continues working through several generations of hardware and operating systems can repay its development cost many times over.&lt;br /&gt;
&lt;br /&gt;
Perl&#039;s own concern for compatibility belongs naturally in such an environment. Experiments with ActivePerl 5.8.8 on Windows 98 illustrate the extraordinary historical reach of both ecosystems. That does not mean new commercial software should target Windows 98. It means the craftsman should recognize the strategic value of technologies which respect existing work.&lt;br /&gt;
&lt;br /&gt;
Fourth, Strawberry Perl provides a serious native Windows Perl environment. It includes Perl, a compiler, build utilities, and access to the CPAN ecosystem. The Windows programmer is not confined to a toy interpreter or an imitation of a Unix system.&lt;br /&gt;
&lt;br /&gt;
Finally, many Perl programmers already use Windows as a daily working environment, and many possible new Perl programmers begin there.&lt;br /&gt;
&lt;br /&gt;
The choice is therefore practical rather than ideological.&lt;br /&gt;
&lt;br /&gt;
The question is not, “Which operating system proves that I am a proper programmer?”&lt;br /&gt;
&lt;br /&gt;
The question is, “Where can existing Perl knowledge be turned into useful software, and where can new craftsmen be invited into the trade?”&lt;br /&gt;
&lt;br /&gt;
== Extreme compatibility creates an opportunity ==&lt;br /&gt;
&lt;br /&gt;
Windows&#039; backward compatibility does more than preserve old software. It encourages a particular kind of small-scale production.&lt;br /&gt;
&lt;br /&gt;
A large vendor may prefer subscriptions, rapid replacement, cloud dependence, and frequent redesign. An independent craftsman may instead produce a focused application which performs one job well and continues doing it for a long time.&lt;br /&gt;
&lt;br /&gt;
That application might serve only a few hundred users. It might serve a laboratory, a local company, a collecting community, a nonprofit, or a narrow professional field. Its market may be too small for a major software firm but large enough to support the person who understands the problem.&lt;br /&gt;
&lt;br /&gt;
Long-lived desktop software also creates continuing forms of useful labor:&lt;br /&gt;
&lt;br /&gt;
* installation;&lt;br /&gt;
* customization;&lt;br /&gt;
* data conversion;&lt;br /&gt;
* training;&lt;br /&gt;
* compatibility maintenance;&lt;br /&gt;
* support;&lt;br /&gt;
* integration with newer services;&lt;br /&gt;
* and carefully managed upgrades.&lt;br /&gt;
&lt;br /&gt;
Backward compatibility does not eliminate this labor. It gives the labor a durable foundation.&lt;br /&gt;
&lt;br /&gt;
The programmer can improve the application without forcing every user to abandon previous work. The user can invest time learning a tool with some confidence that the tool will not disappear merely because an investor has changed direction.&lt;br /&gt;
&lt;br /&gt;
This relationship between craftsman and user is especially important in a guild-minded approach to software. The programmer is not merely attempting to capture attention. He is accepting responsibility for an instrument another person may use in his own work.&lt;br /&gt;
&lt;br /&gt;
== From a working script to a Windows product ==&lt;br /&gt;
&lt;br /&gt;
A Perl script and a Windows product may contain the same essential program logic, but the user&#039;s experience is very different.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ From the developer&#039;s program to the user&#039;s product&lt;br /&gt;
! The developer may have&lt;br /&gt;
! The Windows user reasonably expects&lt;br /&gt;
|-&lt;br /&gt;
| A &amp;lt;code&amp;gt;.pl&amp;lt;/code&amp;gt; file&lt;br /&gt;
| An application that starts from an icon&lt;br /&gt;
|-&lt;br /&gt;
| Installed CPAN modules&lt;br /&gt;
| No requirement to install Perl or dependencies&lt;br /&gt;
|-&lt;br /&gt;
| Commands entered in a terminal&lt;br /&gt;
| A graphical interface&lt;br /&gt;
|-&lt;br /&gt;
| Paths that work on the development computer&lt;br /&gt;
| Correct installation and user-data directories&lt;br /&gt;
|-&lt;br /&gt;
| Diagnostic output in a console&lt;br /&gt;
| Understandable errors and useful logs&lt;br /&gt;
|-&lt;br /&gt;
| A program that works in the workshop&lt;br /&gt;
| A program that works on the user&#039;s computer&lt;br /&gt;
|-&lt;br /&gt;
| A collection of build commands&lt;br /&gt;
| A repeatable installer and upgrade procedure&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The difficult question is therefore not merely whether Perl can display a graphical window. It can.&lt;br /&gt;
&lt;br /&gt;
The difficult question is whether we can establish a clear and repeatable path from the Perl programmer&#039;s existing skills to software which an ordinary Windows user can install and use.&lt;br /&gt;
&lt;br /&gt;
That is the purpose of the [[Developing and Distributing wxPerl Applications on Windows|Perl Lazarus Project&#039;s documented Windows workflow]].&lt;br /&gt;
&lt;br /&gt;
== The Perl Lazarus journey ==&lt;br /&gt;
&lt;br /&gt;
The Perl Lazarus Project builds upon the renewed wxPerl work associated with Johan Vromans and others in the wxPerl community.&amp;lt;ref&amp;gt;[https://dev.to/sciurius/wxperl-revival-5fde Johan Vromans, “wxPerl Revival”]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Its name also acknowledges the example of the [https://www.lazarus-ide.org/ Lazarus IDE and Free Pascal community]. Lazarus demonstrates what can happen when a programming community joins a language, a visual designer, components, documentation, packaging practices, and an economy of books, support, consulting, and application development.&lt;br /&gt;
&lt;br /&gt;
Perl does not necessarily need a single enormous Lazarus-like IDE. It needs a path which craftsmen can follow.&lt;br /&gt;
&lt;br /&gt;
[[File:perl-lazarus-project-workflow.png|thumb|center|900px|alt=Workflow from installing the wxPerl stack through testing an installed Windows application|The Perl Lazarus Project follows the complete journey from installing the stack to testing an installed Windows application.]]&lt;br /&gt;
&lt;br /&gt;
# Install a known working development stack.&lt;br /&gt;
# Design the interface.&lt;br /&gt;
# Generate and write Perl code.&lt;br /&gt;
# Package the application as an executable.&lt;br /&gt;
# Build a Windows installer.&lt;br /&gt;
# Test the installed program on a clean Windows system.&lt;br /&gt;
&lt;br /&gt;
The present stack joins Strawberry Perl, wxWidgets, wxPerl, wxGlade, PAR-based packaging tools, and Inno Setup. The next essay, [[The Perl Lazarus Workshop]], will explain why these tools belong together.&lt;br /&gt;
&lt;br /&gt;
The series will then proceed through installation, visual design, the wxGlade-to-Perl development cycle, application structure, local data, communication with Perl web services, executable creation, installer construction, testing, and support.&lt;br /&gt;
&lt;br /&gt;
This is not merely a theoretical possibility. The [https://github.com/StormSurgeLive/nhc-advisory-gui NHC Advisory Explorer] is one example of a wxPerl program packaged for Windows users.&amp;lt;ref&amp;gt;[https://github.com/StormSurgeLive/nhc-advisory-gui StormSurgeLive, “NHC Advisory Explorer”]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Readers who want to examine earlier tools and historical attempts at wxWidgets rapid application development in Perl may also consult [[Perl and wxWidgets RAD on Windows]].&lt;br /&gt;
&lt;br /&gt;
[[File:nhc-advisory-explorer-windows.png|thumb|center|850px|alt=NHC Advisory Explorer running as a Windows desktop application|The NHC Advisory Explorer demonstrates a wxPerl application distributed for ordinary Windows use.]]&lt;br /&gt;
&lt;br /&gt;
== The craft and the virtue ==&lt;br /&gt;
&lt;br /&gt;
The virtues themselves are discussed elsewhere on Perl Guilds. Here our concern is how they direct the work at hand.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Practical wisdom, or prudence, not laziness&#039;&#039;&#039; asks the craftsman to choose tools and markets according to the work which genuinely needs to be done.&lt;br /&gt;
&lt;br /&gt;
For the weary journeyman or master, prudence may require learning a new part of the trade rather than endlessly repeating familiar server-side work. Existing Perl experience is not discarded. It is redirected and extended.&lt;br /&gt;
&lt;br /&gt;
For the apprentice, prudence means refusing the temptation to skip directly to a polished commercial product without first learning the underlying tools and workflow.&lt;br /&gt;
&lt;br /&gt;
Automation does not eliminate the importance of labor. All earthly value is created by human labor. A tool preserves earlier labor and allows new labor to be applied more effectively, but the tool does not recognize the user&#039;s need, exercise judgment, accept responsibility, or provide service by itself.&lt;br /&gt;
&lt;br /&gt;
The aim of the virtuous programmer is therefore not to avoid work. It is to avoid wasting work.&lt;br /&gt;
&lt;br /&gt;
A repeatable installation procedure preserves labor.&lt;br /&gt;
&lt;br /&gt;
A visual GUI builder reduces unnecessary mechanical effort.&lt;br /&gt;
&lt;br /&gt;
Reusable Perl modules preserve tested knowledge.&lt;br /&gt;
&lt;br /&gt;
An installer saves every user from recreating the developer&#039;s environment.&lt;br /&gt;
&lt;br /&gt;
Backward compatibility protects work already performed by programmers and users.&lt;br /&gt;
&lt;br /&gt;
Good tools allow the craftsman to direct more effort toward understanding the user and completing the work.&lt;br /&gt;
&lt;br /&gt;
== At the workbench: propose a masterwork ==&lt;br /&gt;
&lt;br /&gt;
Before installing anything, describe one possible application.&lt;br /&gt;
&lt;br /&gt;
Write down:&lt;br /&gt;
&lt;br /&gt;
# Who will use it?&lt;br /&gt;
# What work are they doing now?&lt;br /&gt;
# What part of that work belongs on the desktop?&lt;br /&gt;
# What part, if any, belongs on a Perl-powered server?&lt;br /&gt;
# What files or data will the user provide?&lt;br /&gt;
# What result will the application produce?&lt;br /&gt;
# What is the smallest version that would be genuinely useful?&lt;br /&gt;
# Why would someone install it?&lt;br /&gt;
# Why might someone reasonably pay for it?&lt;br /&gt;
# What responsibility will you accept after delivering it?&lt;br /&gt;
# Could an apprentice learn something by helping with it?&lt;br /&gt;
# Could the application remain useful for five or ten years?&lt;br /&gt;
&lt;br /&gt;
The proposal need not describe a large product. A narrow tool completed well is a better masterwork than an ambitious system which never leaves the developer&#039;s computer.&lt;br /&gt;
&lt;br /&gt;
== Continue the journey ==&lt;br /&gt;
&lt;br /&gt;
The next essay, [[The Perl Lazarus Workshop]], examines the tools selected for this work: Strawberry Perl, wxWidgets, wxPerl, wxGlade, MSYS2, PAR-based packaging, and Inno Setup.&lt;br /&gt;
&lt;br /&gt;
The purpose will not be to present a random collection of software. It will be to understand how each tool contributes to one coherent craftsman&#039;s workshop, and how the labor embodied in these tools allows a Perl programmer to perform new work of his own.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Perl Craftsman Returns to the Windows Desktop}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Series:&#039;&#039;&#039; [[Portal:Essays about The Virtuous Perl Programmer|Essays about The Virtuous Perl Programmer]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Next essay:&#039;&#039;&#039; [[The Perl Lazarus Workshop]]&lt;br /&gt;
&lt;br /&gt;
[[Category:The Virtuous Perl Programmer]]&lt;br /&gt;
[[Category:Perl Lazarus Project]]&lt;br /&gt;
[[Category:wxPerl]]&lt;br /&gt;
[[Category:Perl Guilds]]&lt;br /&gt;
[[Category:Windows]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=Portal:Essays_about_The_Virtuous_Perl_Programmer&amp;diff=365</id>
		<title>Portal:Essays about The Virtuous Perl Programmer</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=Portal:Essays_about_The_Virtuous_Perl_Programmer&amp;diff=365"/>
		<updated>2026-07-19T20:41:24Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* The Technical Journey */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== The Technical Journey ==&lt;br /&gt;
&lt;br /&gt;
1 [[The Perl Craftsman Returns to the Windows Desktop|The Perl Craftsman Returns to the Windows Desktop]]&lt;br /&gt;
*: &#039;&#039;Why the journeyman, master, and aspiring Perl programmer should learn to build complete Windows applications.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
2 [[The Perl Lazarus Workshop|The Perl Lazarus Workshop]]&lt;br /&gt;
*: &#039;&#039;Why Strawberry Perl, wxWidgets, wxPerl, wxGlade, MSYS2, PAR, and Inno Setup belong in one practical workshop.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
3 [[Raising a Working wxPerl Shop on Windows|Raising a Working wxPerl Shop on Windows]]&lt;br /&gt;
*: &#039;&#039;Installing the toolchain and establishing an efficient edit–emit–wire–run workflow.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Category:The Virtuous Perl Programmer]]&lt;br /&gt;
[[Category:Perl Lazarus Project]]&lt;br /&gt;
[[Category:wxPerl]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=Portal:Essays_about_The_Virtuous_Perl_Programmer&amp;diff=364</id>
		<title>Portal:Essays about The Virtuous Perl Programmer</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=Portal:Essays_about_The_Virtuous_Perl_Programmer&amp;diff=364"/>
		<updated>2026-07-19T20:40:56Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* The Technical Journey */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== The Technical Journey ==&lt;br /&gt;
&lt;br /&gt;
1 [[The Perl Craftsman Returns to the Windows Desktop|The Perl Craftsman Returns to the Windows Desktop]]&lt;br /&gt;
#: &#039;&#039;Why the journeyman, master, and aspiring Perl programmer should learn to build complete Windows applications.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
2 [[The Perl Lazarus Workshop|The Perl Lazarus Workshop]]&lt;br /&gt;
#: &#039;&#039;Why Strawberry Perl, wxWidgets, wxPerl, wxGlade, MSYS2, PAR, and Inno Setup belong in one practical workshop.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
3 [[Raising a Working wxPerl Shop on Windows|Raising a Working wxPerl Shop on Windows]]&lt;br /&gt;
#: &#039;&#039;Installing the toolchain and establishing an efficient edit–emit–wire–run workflow.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Category:The Virtuous Perl Programmer]]&lt;br /&gt;
[[Category:Perl Lazarus Project]]&lt;br /&gt;
[[Category:wxPerl]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=Raising_a_Working_wxPerl_Shop_on_Windows&amp;diff=363</id>
		<title>Raising a Working wxPerl Shop on Windows</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=Raising_a_Working_wxPerl_Shop_on_Windows&amp;diff=363"/>
		<updated>2026-07-19T20:39:40Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;Previous essay:&amp;#039;&amp;#039;&amp;#039; The Perl Lazarus Workshop  &amp;#039;&amp;#039;&amp;#039;Series:&amp;#039;&amp;#039;&amp;#039; Essays about The Virtuous Perl Programmer  Category:The Virtuous Perl Programmer Category:Perl Lazarus Project Category:wxPerl&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Previous essay:&#039;&#039;&#039; [[The Perl Lazarus Workshop]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Series:&#039;&#039;&#039; [[Portal:Essays about The Virtuous Perl Programmer|Essays about The Virtuous Perl Programmer]]&lt;br /&gt;
&lt;br /&gt;
[[Category:The Virtuous Perl Programmer]]&lt;br /&gt;
[[Category:Perl Lazarus Project]]&lt;br /&gt;
[[Category:wxPerl]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=The_Perl_Lazarus_Workshop&amp;diff=362</id>
		<title>The Perl Lazarus Workshop</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=The_Perl_Lazarus_Workshop&amp;diff=362"/>
		<updated>2026-07-19T20:39:19Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;Previous essay:&amp;#039;&amp;#039;&amp;#039; The Perl Craftsman Returns to the Windows Desktop  &amp;#039;&amp;#039;&amp;#039;Series:&amp;#039;&amp;#039;&amp;#039; Essays about The Virtuous Perl Programmer  &amp;#039;&amp;#039;&amp;#039;Next essay:&amp;#039;&amp;#039;&amp;#039; Raising a Working wxPerl Shop on Windows  Category:The Virtuous Perl Programmer Category:Perl Lazarus Project Category:wxPerl&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Previous essay:&#039;&#039;&#039; [[The Perl Craftsman Returns to the Windows Desktop]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Series:&#039;&#039;&#039; [[Portal:Essays about The Virtuous Perl Programmer|Essays about The Virtuous Perl Programmer]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Next essay:&#039;&#039;&#039; [[Raising a Working wxPerl Shop on Windows]]&lt;br /&gt;
&lt;br /&gt;
[[Category:The Virtuous Perl Programmer]]&lt;br /&gt;
[[Category:Perl Lazarus Project]]&lt;br /&gt;
[[Category:wxPerl]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=The_Perl_Craftsman_Returns_to_the_Windows_Desktop&amp;diff=361</id>
		<title>The Perl Craftsman Returns to the Windows Desktop</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=The_Perl_Craftsman_Returns_to_the_Windows_Desktop&amp;diff=361"/>
		<updated>2026-07-19T20:39:00Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DEFAULTSORT:Perl Craftsman Returns to the Windows Desktop}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Series:&#039;&#039;&#039; [[Portal:Essays about The Virtuous Perl Programmer|Essays about The Virtuous Perl Programmer]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Next essay:&#039;&#039;&#039; [[The Perl Lazarus Workshop]]&lt;br /&gt;
&lt;br /&gt;
[[Category:The Virtuous Perl Programmer]]&lt;br /&gt;
[[Category:Perl Lazarus Project]]&lt;br /&gt;
[[Category:wxPerl]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=The_Perl_Craftsman_Returns_to_the_Windows_Desktop&amp;diff=360</id>
		<title>The Perl Craftsman Returns to the Windows Desktop</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=The_Perl_Craftsman_Returns_to_the_Windows_Desktop&amp;diff=360"/>
		<updated>2026-07-19T20:38:45Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;{{DEFAULTSORT:Perl Craftsman Returns to the Windows Desktop}}  &amp;#039;&amp;#039;&amp;#039;Series:&amp;#039;&amp;#039;&amp;#039; Essays about The Virtuous Perl Programmer  &amp;#039;&amp;#039;&amp;#039;Next essay:&amp;#039;&amp;#039;&amp;#039; The Perl Lazarus Workshop&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DEFAULTSORT:Perl Craftsman Returns to the Windows Desktop}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Series:&#039;&#039;&#039; [[Portal:Essays about The Virtuous Perl Programmer|Essays about The Virtuous Perl Programmer]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Next essay:&#039;&#039;&#039; [[The Perl Lazarus Workshop]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=Portal:Essays_about_The_Virtuous_Perl_Programmer&amp;diff=359</id>
		<title>Portal:Essays about The Virtuous Perl Programmer</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=Portal:Essays_about_The_Virtuous_Perl_Programmer&amp;diff=359"/>
		<updated>2026-07-19T20:38:21Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;== The Technical Journey ==  # The Perl Craftsman Returns to the Windows Desktop #: &amp;#039;&amp;#039;Why the journeyman, master, and aspiring Perl programmer should learn to build complete Windows applications.&amp;#039;&amp;#039;  # The Perl Lazarus Workshop #: &amp;#039;&amp;#039;Why Strawberry Perl, wxWidgets, wxPerl, wxGlade, MSYS2, PAR, and Inno Setup belong in one practical workshop.&amp;#039;&amp;#039;  # Raising a Working wxPerl Shop on Windows|R...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== The Technical Journey ==&lt;br /&gt;
&lt;br /&gt;
# [[The Perl Craftsman Returns to the Windows Desktop|The Perl Craftsman Returns to the Windows Desktop]]&lt;br /&gt;
#: &#039;&#039;Why the journeyman, master, and aspiring Perl programmer should learn to build complete Windows applications.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# [[The Perl Lazarus Workshop|The Perl Lazarus Workshop]]&lt;br /&gt;
#: &#039;&#039;Why Strawberry Perl, wxWidgets, wxPerl, wxGlade, MSYS2, PAR, and Inno Setup belong in one practical workshop.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# [[Raising a Working wxPerl Shop on Windows|Raising a Working wxPerl Shop on Windows]]&lt;br /&gt;
#: &#039;&#039;Installing the toolchain and establishing an efficient edit–emit–wire–run workflow.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Category:The Virtuous Perl Programmer]]&lt;br /&gt;
[[Category:Perl Lazarus Project]]&lt;br /&gt;
[[Category:wxPerl]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=Main_Page&amp;diff=358</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=Main_Page&amp;diff=358"/>
		<updated>2026-07-19T20:27:30Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* General Audience Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Welcome to the Perl Guilds Wiki ===&lt;br /&gt;
The &#039;&#039;&#039;Perl Guilds&#039;&#039;&#039; wiki is a community-driven resource designed to support &#039;&#039;&#039;freelance Perl programmers&#039;&#039;&#039; and help them thrive in their independent careers. The original wiki concept was inspired by [https://wiki.freepascal.org FreePascal]&#039;s community wiki.&lt;br /&gt;
&lt;br /&gt;
This wiki is maintained by [[ServiceProviders|&#039;&#039;&#039;these people&#039;&#039;&#039;]]. You may thank them for this resource by hiring them for something.&lt;br /&gt;
&lt;br /&gt;
=== Transforming Perl by Striving for Virtue ===&lt;br /&gt;
The infamous three &amp;quot;virtues&amp;quot; of a Perl programmer are not what you have been led to believe. They are bad, very bad. Please [https://www.youtube.com/watch?v=mEWfo9U3uTM view this] to learn more about [[The Real 3 Virtues of Perl|&#039;&#039;&#039;the true virtues of Perl&#039;&#039;&#039;]]: &#039;&#039;&#039;&#039;&#039;Prudence&#039;&#039;&#039;&#039;&#039;, &#039;&#039;&#039;&#039;&#039;Spiritedness&#039;&#039;&#039;&#039;&#039;, and &#039;&#039;&#039;&#039;&#039;Good Order&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
I hope to convey these ideals through this resource, and I hope you can help me.&lt;br /&gt;
&lt;br /&gt;
=== Site Feedback and Contributions ===&lt;br /&gt;
Click [https://github.com/The-Perl-Cottage-Guild/wiki-requests/issues here] to report an issue with the content, suggest edits or additions, or request editor access.&lt;br /&gt;
&lt;br /&gt;
You may also [https://sourceforge.net/projects/perl-guilds/lists/perl-guilds-editors &#039;&#039;&#039;join the editors email list&#039;&#039;&#039;] to provide feedback, volunteer, or discuss proposed changes. &amp;lt;u&amp;gt;&#039;&#039;&#039;&#039;&#039;[https://sourceforge.net/projects/perl-guilds/lists/perl-guilds-editors This may get you a quicker response].&#039;&#039;&#039;&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Volunteers are eligible to create a listing [[ServiceProviders|here]].&lt;br /&gt;
&lt;br /&gt;
= Portals =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left; width:49%;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
== General Audience Links ==&lt;br /&gt;
&lt;br /&gt;
Wiki portals have been created for a selection of the platforms and topics that Perl and related tools support. The portals gather related information for each platform or topic in one place to make it easier to locate. The full list of supported platforms may be found [[Platform_list|here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:wxPerl.png|link=Portal:GUIs with Perl|[[Portal:GUIs with Perl|GUIs with Perl]]&lt;br /&gt;
File:Logo Windows 01.png|link=Portal:Windows|[[Portal:Windows|Windows]]&lt;br /&gt;
File:Payment.jpeg|link=Portal:Payment Processing|[[Portal:Payment Processing|Getting Paid]]&lt;br /&gt;
File:Perlopenmp.jpeg|link=Portal:Perl+OpenMP|[[Portal:Perl+OpenMP|Perl+OpenMP]]&lt;br /&gt;
File:Concurrency.png|link=Portal:Concurrency|[[Portal:Concurrency|Concurrency]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:ToolBox.png|link=Portal:Software Development Tools|[[Portal:Software Development Tools|Development Tools]]&lt;br /&gt;
File:perlCGI.jpg|link=Portal:Perl CGI Programming|[[Portal:Perl CGI Programming|Legacy Perl]]&lt;br /&gt;
File:Camels.jpg|link=Portal:Perl Powered Programs (PPP)|[[Portal:Perl Powered Programs (PPP)|Perl Powered Programs (PPP)]]&lt;br /&gt;
File:Perlcommunity.png|link=Portal:Perl Communities|[[Portal:Perl Communities|Communities]]&lt;br /&gt;
File:XS.jpg|link=Portal:Embedding and Extending Perl|[[Portal:Embedding and Extending Perl|Embedding and Extending Perl]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:Money.jpeg|link=Portal:Perl for Profit|[[Portal:Perl for Profit|Perl for Profit]]&lt;br /&gt;
File:History.gif|link=Portal:Perl History|[[Portal:Perl History|Perl History]]&lt;br /&gt;
File:SQLdb TSQLQuery.PNG|link=Portal:Databases|[[Portal:Databases|Database Development]]&lt;br /&gt;
File:GamesPortalLogo.png|link=Portal:Game Development|[[Portal:Game Development|Game Development]]&lt;br /&gt;
File:HowTo.png|link=Portal:HowTo Demos|[[Portal:HowTo Demos|HowTo Demos]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:Rperl.jpeg|link=Portal:Alt. Perls|[[Portal:Alt. Perls|Alt. Perls]]&lt;br /&gt;
File:Ai.jpeg|link=Portal:Artificial Intelligence|[[Portal:Artificial Intelligence|Artificial Intelligence]]&lt;br /&gt;
File:Crypto.png|link=Portal:Crypto and Blockchain|[[Portal:Crypto and Blockchain|Blockchain]]&lt;br /&gt;
File:Perlbooks.jpg|link=Portal:Ex Libris|[[Portal:Ex Libris|Ex Libris]]&lt;br /&gt;
File:Embedded.png|link=Portal:Embedded|[[Portal:Embedded|Embedded]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:FBSD Daemon.jpg|link=Portal:FreeBSD,OpenBSD,etc|[[Portal:FreeBSD,OpenBSD,etc|FreeBSD, OpenBSD, etc.]]&lt;br /&gt;
File:tux.png|link=Portal:Linux|[[Portal:Linux|Linux]]&lt;br /&gt;
File:macOSlogo.png|link=Portal:Mac|[[Portal:Mac|macOS]]&lt;br /&gt;
File:HardwarePortalLogo.png|link=Portal:Hardware and Robotics|[[Portal:Hardware and Robotics|Hardware and Robotics]]&lt;br /&gt;
File:Businessmodels.jpeg|link=Portal:Perl Business Models and Case Studies|[[Portal:Perl Business Models and Case Studies|Perl Business Models and Case Studies]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:ImageMagick.gif|link=Portal:Graphics Programming|[[Portal:Graphics Programming|Graphics Programming]]&lt;br /&gt;
File:Hpc.jpg|link=Portal:HPC - High Performance Computing|[[Portal:HPC - High Performance Computing|HPC - High Performance Computing]]&lt;br /&gt;
File:Bioperl.jpeg|link=Portal:Life Sciences|[[Portal:Life Sciences|Life Sciences]]&lt;br /&gt;
File:tdrawgrid.png|link=Portal:SaaS and Web Development|[[Portal:SaaS and Web Development|SaaS and Web Development]]&lt;br /&gt;
File:tachart getting started step6.png|link=Portal:SciTech|[[Portal:SciTech|Science and Technology]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:NewUserLogo.png|link=Portal:New Users|[[Portal:Essays about The Virtuous Perl Programmer|Essays about The Virtuous Perl Programmer]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:right; width:49%;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
== Perl Craftsmen and Professional Development ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This section is for independent software professionals&#039;&#039;&#039; &#039;&#039;&#039;who charge money for Perl-related services&#039;&#039;&#039; and use Perl as their secret weapon to make a living, or for those wishing to become one.&lt;br /&gt;
&lt;br /&gt;
It is not for &amp;quot;jacks of all trades.&amp;quot; This section is for Perl craftsmen: journeymen and true masters who wish to leverage their Perl skills to put food in their kids&#039; mouths and a roof over their heads.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Quick Links&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Developing and Distributing wxPerl Applications on Windows|wxPerl on Windows: developing and distributing wxPerl applications]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notable Updates&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Portal:GUIs with Perl|GUIs with Perl]]&lt;br /&gt;
  ** [[Developing and Distributing wxPerl Applications on Windows]]&lt;br /&gt;
* [[Portal:Perl+OpenMP|Perl+OpenMP]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Email Lists&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[https://sourceforge.net/projects/perl-guilds/lists/perl-guilds-editors Perl-Guilds Wiki Contributors]&#039;&#039;&#039; listserv - join if you would like to contribute or offer regular feedback&lt;br /&gt;
* &#039;&#039;&#039;[https://sourceforge.net/projects/perl-openmp/lists/perl-openmp-discuss Perl+OpenMP]&#039;&#039;&#039; listserv&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: Yes, I encourage email lists for your project; and it turns out SourceForge.net is a great place to host reliable email lists!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;RAD, Rapid Application Development Tools, IDEs, and Installer-Makers&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [https://sourceforge.net/projects/wxglade/ wxGlade] - written in Python, but can output Perl&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Using Perl for Making Windows GUI Programs&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Cross-platform GUIs with wxPerl&lt;br /&gt;
  ** [[Developing and Distributing wxPerl Applications on Windows]]&lt;br /&gt;
* Windows-specific GUIs with Win32::GUI&lt;br /&gt;
* Cross-platform GUIs with GUIDeFATE&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Using Perl for Creating a Commercial SaaS and Other Services&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Monetization Strategies for Perl Programmers&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Commercial Success Stories and Case Studies&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Downloads&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Community Participation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [https://www.perl-guilds.net Perl Guilds Forum] - test forum to see if any activity is drawn to it&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tutorials&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Books and Magazines&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Related Sites&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* https://perlclientdirectory.com/ - curated list of Perl clients for external APIs and services&lt;br /&gt;
* https://perlmodules.net - track changes to your favorite Perl modules in CPAN&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left; margin-right:0.9em;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== In the News ==&lt;br /&gt;
&lt;br /&gt;
A summary of recent news stories about Perl can be found [[In the News|here]].&lt;br /&gt;
&lt;br /&gt;
== Projects using Perl ==&lt;br /&gt;
&lt;br /&gt;
Details and screenshots of an extensive number of applications created with Perl may be found [[Projects using Perl|here]]. There is also plenty of source code that can be found [[:category:Code|here]].&lt;br /&gt;
&lt;br /&gt;
== Bug Tracker ==&lt;br /&gt;
&lt;br /&gt;
The [https://github.com/Perl/perl5/issues Perl Bug Tracker] and the [https://rt.perl.org/ Perl Request Tracker] (RT) are the places to go to check if the anomaly you have encountered has already been recorded as a Perl or Perl module bug. If not, you can lodge a bug report; see [[How do I create a bug report]] so that it can be fixed. Even better, lodge a patch if you can; see [[Creating A Patch]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=Main_Page&amp;diff=357</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=Main_Page&amp;diff=357"/>
		<updated>2026-07-19T20:27:01Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* General Audience Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Welcome to the Perl Guilds Wiki ===&lt;br /&gt;
The &#039;&#039;&#039;Perl Guilds&#039;&#039;&#039; wiki is a community-driven resource designed to support &#039;&#039;&#039;freelance Perl programmers&#039;&#039;&#039; and help them thrive in their independent careers. The original wiki concept was inspired by [https://wiki.freepascal.org FreePascal]&#039;s community wiki.&lt;br /&gt;
&lt;br /&gt;
This wiki is maintained by [[ServiceProviders|&#039;&#039;&#039;these people&#039;&#039;&#039;]]. You may thank them for this resource by hiring them for something.&lt;br /&gt;
&lt;br /&gt;
=== Transforming Perl by Striving for Virtue ===&lt;br /&gt;
The infamous three &amp;quot;virtues&amp;quot; of a Perl programmer are not what you have been led to believe. They are bad, very bad. Please [https://www.youtube.com/watch?v=mEWfo9U3uTM view this] to learn more about [[The Real 3 Virtues of Perl|&#039;&#039;&#039;the true virtues of Perl&#039;&#039;&#039;]]: &#039;&#039;&#039;&#039;&#039;Prudence&#039;&#039;&#039;&#039;&#039;, &#039;&#039;&#039;&#039;&#039;Spiritedness&#039;&#039;&#039;&#039;&#039;, and &#039;&#039;&#039;&#039;&#039;Good Order&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
I hope to convey these ideals through this resource, and I hope you can help me.&lt;br /&gt;
&lt;br /&gt;
=== Site Feedback and Contributions ===&lt;br /&gt;
Click [https://github.com/The-Perl-Cottage-Guild/wiki-requests/issues here] to report an issue with the content, suggest edits or additions, or request editor access.&lt;br /&gt;
&lt;br /&gt;
You may also [https://sourceforge.net/projects/perl-guilds/lists/perl-guilds-editors &#039;&#039;&#039;join the editors email list&#039;&#039;&#039;] to provide feedback, volunteer, or discuss proposed changes. &amp;lt;u&amp;gt;&#039;&#039;&#039;&#039;&#039;[https://sourceforge.net/projects/perl-guilds/lists/perl-guilds-editors This may get you a quicker response].&#039;&#039;&#039;&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Volunteers are eligible to create a listing [[ServiceProviders|here]].&lt;br /&gt;
&lt;br /&gt;
= Portals =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left; width:49%;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
== General Audience Links ==&lt;br /&gt;
&lt;br /&gt;
Wiki portals have been created for a selection of the platforms and topics that Perl and related tools support. The portals gather related information for each platform or topic in one place to make it easier to locate. The full list of supported platforms may be found [[Platform_list|here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:wxPerl.png|link=Portal:GUIs with Perl|[[Portal:GUIs with Perl|GUIs with Perl]]&lt;br /&gt;
File:Logo Windows 01.png|link=Portal:Windows|[[Portal:Windows|Windows]]&lt;br /&gt;
File:Payment.jpeg|link=Portal:Payment Processing|[[Portal:Payment Processing|Getting Paid]]&lt;br /&gt;
File:Perlopenmp.jpeg|link=Portal:Perl+OpenMP|[[Portal:Perl+OpenMP|Perl+OpenMP]]&lt;br /&gt;
File:Concurrency.png|link=Portal:Concurrency|[[Portal:Concurrency|Concurrency]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:ToolBox.png|link=Portal:Software Development Tools|[[Portal:Software Development Tools|Development Tools]]&lt;br /&gt;
File:perlCGI.jpg|link=Portal:Perl CGI Programming|[[Portal:Perl CGI Programming|Legacy Perl]]&lt;br /&gt;
File:Camels.jpg|link=Portal:Perl Powered Programs (PPP)|[[Portal:Perl Powered Programs (PPP)|Perl Powered Programs (PPP)]]&lt;br /&gt;
File:Perlcommunity.png|link=Portal:Perl Communities|[[Portal:Perl Communities|Communities]]&lt;br /&gt;
File:XS.jpg|link=Portal:Embedding and Extending Perl|[[Portal:Embedding and Extending Perl|Embedding and Extending Perl]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:Money.jpeg|link=Portal:Perl for Profit|[[Portal:Perl for Profit|Perl for Profit]]&lt;br /&gt;
File:History.gif|link=Portal:Perl History|[[Portal:Perl History|Perl History]]&lt;br /&gt;
File:SQLdb TSQLQuery.PNG|link=Portal:Databases|[[Portal:Databases|Database Development]]&lt;br /&gt;
File:GamesPortalLogo.png|link=Portal:Game Development|[[Portal:Game Development|Game Development]]&lt;br /&gt;
File:HowTo.png|link=Portal:HowTo Demos|[[Portal:HowTo Demos|HowTo Demos]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:Rperl.jpeg|link=Portal:Alt. Perls|[[Portal:Alt. Perls|Alt. Perls]]&lt;br /&gt;
File:Ai.jpeg|link=Portal:Artificial Intelligence|[[Portal:Artificial Intelligence|Artificial Intelligence]]&lt;br /&gt;
File:Crypto.png|link=Portal:Crypto and Blockchain|[[Portal:Crypto and Blockchain|Blockchain]]&lt;br /&gt;
File:Perlbooks.jpg|link=Portal:Ex Libris|[[Portal:Ex Libris|Ex Libris]]&lt;br /&gt;
File:Embedded.png|link=Portal:Embedded|[[Portal:Embedded|Embedded]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:FBSD Daemon.jpg|link=Portal:FreeBSD,OpenBSD,etc|[[Portal:FreeBSD,OpenBSD,etc|FreeBSD, OpenBSD, etc.]]&lt;br /&gt;
File:tux.png|link=Portal:Linux|[[Portal:Linux|Linux]]&lt;br /&gt;
File:macOSlogo.png|link=Portal:Mac|[[Portal:Mac|macOS]]&lt;br /&gt;
File:HardwarePortalLogo.png|link=Portal:Hardware and Robotics|[[Portal:Hardware and Robotics|Hardware and Robotics]]&lt;br /&gt;
File:Businessmodels.jpeg|link=Portal:Perl Business Models and Case Studies|[[Portal:Perl Business Models and Case Studies|Perl Business Models and Case Studies]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:ImageMagick.gif|link=Portal:Graphics Programming|[[Portal:Graphics Programming|Graphics Programming]]&lt;br /&gt;
File:Hpc.jpg|link=Portal:HPC - High Performance Computing|[[Portal:HPC - High Performance Computing|HPC - High Performance Computing]]&lt;br /&gt;
File:Bioperl.jpeg|link=Portal:Life Sciences|[[Portal:Life Sciences|Life Sciences]]&lt;br /&gt;
File:tdrawgrid.png|link=Portal:SaaS and Web Development|[[Portal:SaaS and Web Development|SaaS and Web Development]]&lt;br /&gt;
File:tachart getting started step6.png|link=Portal:SciTech|[[Portal:SciTech|Science and Technology]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:NewUserLogo.png|link=Portal:New Users|[[Portal:Essays on The Virtuous Perl Programmer|Essays on The Virtuous Perl Programmer]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:right; width:49%;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
== Perl Craftsmen and Professional Development ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This section is for independent software professionals&#039;&#039;&#039; &#039;&#039;&#039;who charge money for Perl-related services&#039;&#039;&#039; and use Perl as their secret weapon to make a living, or for those wishing to become one.&lt;br /&gt;
&lt;br /&gt;
It is not for &amp;quot;jacks of all trades.&amp;quot; This section is for Perl craftsmen: journeymen and true masters who wish to leverage their Perl skills to put food in their kids&#039; mouths and a roof over their heads.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Quick Links&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Developing and Distributing wxPerl Applications on Windows|wxPerl on Windows: developing and distributing wxPerl applications]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notable Updates&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Portal:GUIs with Perl|GUIs with Perl]]&lt;br /&gt;
  ** [[Developing and Distributing wxPerl Applications on Windows]]&lt;br /&gt;
* [[Portal:Perl+OpenMP|Perl+OpenMP]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Email Lists&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[https://sourceforge.net/projects/perl-guilds/lists/perl-guilds-editors Perl-Guilds Wiki Contributors]&#039;&#039;&#039; listserv - join if you would like to contribute or offer regular feedback&lt;br /&gt;
* &#039;&#039;&#039;[https://sourceforge.net/projects/perl-openmp/lists/perl-openmp-discuss Perl+OpenMP]&#039;&#039;&#039; listserv&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: Yes, I encourage email lists for your project; and it turns out SourceForge.net is a great place to host reliable email lists!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;RAD, Rapid Application Development Tools, IDEs, and Installer-Makers&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [https://sourceforge.net/projects/wxglade/ wxGlade] - written in Python, but can output Perl&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Using Perl for Making Windows GUI Programs&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Cross-platform GUIs with wxPerl&lt;br /&gt;
  ** [[Developing and Distributing wxPerl Applications on Windows]]&lt;br /&gt;
* Windows-specific GUIs with Win32::GUI&lt;br /&gt;
* Cross-platform GUIs with GUIDeFATE&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Using Perl for Creating a Commercial SaaS and Other Services&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Monetization Strategies for Perl Programmers&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Commercial Success Stories and Case Studies&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Downloads&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Community Participation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [https://www.perl-guilds.net Perl Guilds Forum] - test forum to see if any activity is drawn to it&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tutorials&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Books and Magazines&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Related Sites&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* https://perlclientdirectory.com/ - curated list of Perl clients for external APIs and services&lt;br /&gt;
* https://perlmodules.net - track changes to your favorite Perl modules in CPAN&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left; margin-right:0.9em;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== In the News ==&lt;br /&gt;
&lt;br /&gt;
A summary of recent news stories about Perl can be found [[In the News|here]].&lt;br /&gt;
&lt;br /&gt;
== Projects using Perl ==&lt;br /&gt;
&lt;br /&gt;
Details and screenshots of an extensive number of applications created with Perl may be found [[Projects using Perl|here]]. There is also plenty of source code that can be found [[:category:Code|here]].&lt;br /&gt;
&lt;br /&gt;
== Bug Tracker ==&lt;br /&gt;
&lt;br /&gt;
The [https://github.com/Perl/perl5/issues Perl Bug Tracker] and the [https://rt.perl.org/ Perl Request Tracker] (RT) are the places to go to check if the anomaly you have encountered has already been recorded as a Perl or Perl module bug. If not, you can lodge a bug report; see [[How do I create a bug report]] so that it can be fixed. Even better, lodge a patch if you can; see [[Creating A Patch]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=Main_Page&amp;diff=356</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=Main_Page&amp;diff=356"/>
		<updated>2026-07-10T16:25:33Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Welcome to the Perl Guilds Wiki ===&lt;br /&gt;
The &#039;&#039;&#039;Perl Guilds&#039;&#039;&#039; wiki is a community-driven resource designed to support &#039;&#039;&#039;freelance Perl programmers&#039;&#039;&#039; and help them thrive in their independent careers. The original wiki concept was inspired by [https://wiki.freepascal.org FreePascal]&#039;s community wiki.&lt;br /&gt;
&lt;br /&gt;
This wiki is maintained by [[ServiceProviders|&#039;&#039;&#039;these people&#039;&#039;&#039;]]. You may thank them for this resource by hiring them for something.&lt;br /&gt;
&lt;br /&gt;
=== Transforming Perl by Striving for Virtue ===&lt;br /&gt;
The infamous three &amp;quot;virtues&amp;quot; of a Perl programmer are not what you have been led to believe. They are bad, very bad. Please [https://www.youtube.com/watch?v=mEWfo9U3uTM view this] to learn more about [[The Real 3 Virtues of Perl|&#039;&#039;&#039;the true virtues of Perl&#039;&#039;&#039;]]: &#039;&#039;&#039;&#039;&#039;Prudence&#039;&#039;&#039;&#039;&#039;, &#039;&#039;&#039;&#039;&#039;Spiritedness&#039;&#039;&#039;&#039;&#039;, and &#039;&#039;&#039;&#039;&#039;Good Order&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
I hope to convey these ideals through this resource, and I hope you can help me.&lt;br /&gt;
&lt;br /&gt;
=== Site Feedback and Contributions ===&lt;br /&gt;
Click [https://github.com/The-Perl-Cottage-Guild/wiki-requests/issues here] to report an issue with the content, suggest edits or additions, or request editor access.&lt;br /&gt;
&lt;br /&gt;
You may also [https://sourceforge.net/projects/perl-guilds/lists/perl-guilds-editors &#039;&#039;&#039;join the editors email list&#039;&#039;&#039;] to provide feedback, volunteer, or discuss proposed changes. &amp;lt;u&amp;gt;&#039;&#039;&#039;&#039;&#039;[https://sourceforge.net/projects/perl-guilds/lists/perl-guilds-editors This may get you a quicker response].&#039;&#039;&#039;&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Volunteers are eligible to create a listing [[ServiceProviders|here]].&lt;br /&gt;
&lt;br /&gt;
= Portals =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left; width:49%;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
== General Audience Links ==&lt;br /&gt;
&lt;br /&gt;
Wiki portals have been created for a selection of the platforms and topics that Perl and related tools support. The portals gather related information for each platform or topic in one place to make it easier to locate. The full list of supported platforms may be found [[Platform_list|here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:wxPerl.png|link=Portal:GUIs with Perl|[[Portal:GUIs with Perl|GUIs with Perl]]&lt;br /&gt;
File:Logo Windows 01.png|link=Portal:Windows|[[Portal:Windows|Windows]]&lt;br /&gt;
File:Payment.jpeg|link=Portal:Payment Processing|[[Portal:Payment Processing|Getting Paid]]&lt;br /&gt;
File:Perlopenmp.jpeg|link=Portal:Perl+OpenMP|[[Portal:Perl+OpenMP|Perl+OpenMP]]&lt;br /&gt;
File:Concurrency.png|link=Portal:Concurrency|[[Portal:Concurrency|Concurrency]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:ToolBox.png|link=Portal:Software Development Tools|[[Portal:Software Development Tools|Development Tools]]&lt;br /&gt;
File:perlCGI.jpg|link=Portal:Perl CGI Programming|[[Portal:Perl CGI Programming|Legacy Perl]]&lt;br /&gt;
File:Camels.jpg|link=Portal:Perl Powered Programs (PPP)|[[Portal:Perl Powered Programs (PPP)|Perl Powered Programs (PPP)]]&lt;br /&gt;
File:Perlcommunity.png|link=Portal:Perl Communities|[[Portal:Perl Communities|Communities]]&lt;br /&gt;
File:XS.jpg|link=Portal:Embedding and Extending Perl|[[Portal:Embedding and Extending Perl|Embedding and Extending Perl]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:Money.jpeg|link=Portal:Perl for Profit|[[Portal:Perl for Profit|Perl for Profit]]&lt;br /&gt;
File:History.gif|link=Portal:Perl History|[[Portal:Perl History|Perl History]]&lt;br /&gt;
File:SQLdb TSQLQuery.PNG|link=Portal:Databases|[[Portal:Databases|Database Development]]&lt;br /&gt;
File:GamesPortalLogo.png|link=Portal:Game Development|[[Portal:Game Development|Game Development]]&lt;br /&gt;
File:HowTo.png|link=Portal:HowTo Demos|[[Portal:HowTo Demos|HowTo Demos]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:Rperl.jpeg|link=Portal:Alt. Perls|[[Portal:Alt. Perls|Alt. Perls]]&lt;br /&gt;
File:Ai.jpeg|link=Portal:Artificial Intelligence|[[Portal:Artificial Intelligence|Artificial Intelligence]]&lt;br /&gt;
File:Crypto.png|link=Portal:Crypto and Blockchain|[[Portal:Crypto and Blockchain|Blockchain]]&lt;br /&gt;
File:Perlbooks.jpg|link=Portal:Ex Libris|[[Portal:Ex Libris|Ex Libris]]&lt;br /&gt;
File:Embedded.png|link=Portal:Embedded|[[Portal:Embedded|Embedded]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:FBSD Daemon.jpg|link=Portal:FreeBSD,OpenBSD,etc|[[Portal:FreeBSD,OpenBSD,etc|FreeBSD, OpenBSD, etc.]]&lt;br /&gt;
File:tux.png|link=Portal:Linux|[[Portal:Linux|Linux]]&lt;br /&gt;
File:macOSlogo.png|link=Portal:Mac|[[Portal:Mac|macOS]]&lt;br /&gt;
File:HardwarePortalLogo.png|link=Portal:Hardware and Robotics|[[Portal:Hardware and Robotics|Hardware and Robotics]]&lt;br /&gt;
File:Businessmodels.jpeg|link=Portal:Perl Business Models and Case Studies|[[Portal:Perl Business Models and Case Studies|Perl Business Models and Case Studies]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:ImageMagick.gif|link=Portal:Graphics Programming|[[Portal:Graphics Programming|Graphics Programming]]&lt;br /&gt;
File:Hpc.jpg|link=Portal:HPC - High Performance Computing|[[Portal:HPC - High Performance Computing|HPC - High Performance Computing]]&lt;br /&gt;
File:Bioperl.jpeg|link=Portal:Life Sciences|[[Portal:Life Sciences|Life Sciences]]&lt;br /&gt;
File:tdrawgrid.png|link=Portal:SaaS and Web Development|[[Portal:SaaS and Web Development|SaaS and Web Development]]&lt;br /&gt;
File:tachart getting started step6.png|link=Portal:SciTech|[[Portal:SciTech|Science and Technology]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:NewUserLogo.png|link=Portal:New Users|[[Portal:New Users|New Users]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:right; width:49%;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
== Perl Craftsmen and Professional Development ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This section is for independent software professionals&#039;&#039;&#039; &#039;&#039;&#039;who charge money for Perl-related services&#039;&#039;&#039; and use Perl as their secret weapon to make a living, or for those wishing to become one.&lt;br /&gt;
&lt;br /&gt;
It is not for &amp;quot;jacks of all trades.&amp;quot; This section is for Perl craftsmen: journeymen and true masters who wish to leverage their Perl skills to put food in their kids&#039; mouths and a roof over their heads.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Quick Links&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Developing and Distributing wxPerl Applications on Windows|wxPerl on Windows: developing and distributing wxPerl applications]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notable Updates&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Portal:GUIs with Perl|GUIs with Perl]]&lt;br /&gt;
  ** [[Developing and Distributing wxPerl Applications on Windows]]&lt;br /&gt;
* [[Portal:Perl+OpenMP|Perl+OpenMP]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Email Lists&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[https://sourceforge.net/projects/perl-guilds/lists/perl-guilds-editors Perl-Guilds Wiki Contributors]&#039;&#039;&#039; listserv - join if you would like to contribute or offer regular feedback&lt;br /&gt;
* &#039;&#039;&#039;[https://sourceforge.net/projects/perl-openmp/lists/perl-openmp-discuss Perl+OpenMP]&#039;&#039;&#039; listserv&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: Yes, I encourage email lists for your project; and it turns out SourceForge.net is a great place to host reliable email lists!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;RAD, Rapid Application Development Tools, IDEs, and Installer-Makers&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [https://sourceforge.net/projects/wxglade/ wxGlade] - written in Python, but can output Perl&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Using Perl for Making Windows GUI Programs&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Cross-platform GUIs with wxPerl&lt;br /&gt;
  ** [[Developing and Distributing wxPerl Applications on Windows]]&lt;br /&gt;
* Windows-specific GUIs with Win32::GUI&lt;br /&gt;
* Cross-platform GUIs with GUIDeFATE&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Using Perl for Creating a Commercial SaaS and Other Services&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Monetization Strategies for Perl Programmers&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Commercial Success Stories and Case Studies&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Downloads&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Community Participation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [https://www.perl-guilds.net Perl Guilds Forum] - test forum to see if any activity is drawn to it&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tutorials&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Books and Magazines&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Related Sites&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* https://perlclientdirectory.com/ - curated list of Perl clients for external APIs and services&lt;br /&gt;
* https://perlmodules.net - track changes to your favorite Perl modules in CPAN&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left; margin-right:0.9em;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== In the News ==&lt;br /&gt;
&lt;br /&gt;
A summary of recent news stories about Perl can be found [[In the News|here]].&lt;br /&gt;
&lt;br /&gt;
== Projects using Perl ==&lt;br /&gt;
&lt;br /&gt;
Details and screenshots of an extensive number of applications created with Perl may be found [[Projects using Perl|here]]. There is also plenty of source code that can be found [[:category:Code|here]].&lt;br /&gt;
&lt;br /&gt;
== Bug Tracker ==&lt;br /&gt;
&lt;br /&gt;
The [https://github.com/Perl/perl5/issues Perl Bug Tracker] and the [https://rt.perl.org/ Perl Request Tracker] (RT) are the places to go to check if the anomaly you have encountered has already been recorded as a Perl or Perl module bug. If not, you can lodge a bug report; see [[How do I create a bug report]] so that it can be fixed. Even better, lodge a patch if you can; see [[Creating A Patch]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=File:Wxglade-nhc-advisory-explorer-3.png&amp;diff=355</id>
		<title>File:Wxglade-nhc-advisory-explorer-3.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=File:Wxglade-nhc-advisory-explorer-3.png&amp;diff=355"/>
		<updated>2026-07-06T05:53:39Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=File:Wxglade-nhc-advisory-explorer-2.png&amp;diff=354</id>
		<title>File:Wxglade-nhc-advisory-explorer-2.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=File:Wxglade-nhc-advisory-explorer-2.png&amp;diff=354"/>
		<updated>2026-07-06T05:53:11Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=File:Wxglade-nhc-advisory-explorer-1.png&amp;diff=353</id>
		<title>File:Wxglade-nhc-advisory-explorer-1.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=File:Wxglade-nhc-advisory-explorer-1.png&amp;diff=353"/>
		<updated>2026-07-06T05:52:40Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=File:Wxglade-netcdf-explorer.png&amp;diff=352</id>
		<title>File:Wxglade-netcdf-explorer.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=File:Wxglade-netcdf-explorer.png&amp;diff=352"/>
		<updated>2026-07-06T05:50:29Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=File:Wxglade-limewire-style-interface.png&amp;diff=351</id>
		<title>File:Wxglade-limewire-style-interface.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=File:Wxglade-limewire-style-interface.png&amp;diff=351"/>
		<updated>2026-07-06T05:50:03Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=File:Wxglade-wsftp-clone.png&amp;diff=350</id>
		<title>File:Wxglade-wsftp-clone.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=File:Wxglade-wsftp-clone.png&amp;diff=350"/>
		<updated>2026-07-05T07:27:50Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=File:Wxglade-putty-configuration-pane.png&amp;diff=349</id>
		<title>File:Wxglade-putty-configuration-pane.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=File:Wxglade-putty-configuration-pane.png&amp;diff=349"/>
		<updated>2026-07-05T07:27:16Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=File:Wxglade-netscape-clone.png&amp;diff=348</id>
		<title>File:Wxglade-netscape-clone.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=File:Wxglade-netscape-clone.png&amp;diff=348"/>
		<updated>2026-07-05T07:26:48Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=File:Wxglade-windows-help-gui.png&amp;diff=347</id>
		<title>File:Wxglade-windows-help-gui.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=File:Wxglade-windows-help-gui.png&amp;diff=347"/>
		<updated>2026-07-05T07:26:03Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=GUI_ideas_for_use_with_wxGlade&amp;diff=346</id>
		<title>GUI ideas for use with wxGlade</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=GUI_ideas_for_use_with_wxGlade&amp;diff=346"/>
		<updated>2026-07-05T07:23:00Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&lt;br /&gt;
= wxPerl / wxGlade Application Template Catalog =&lt;br /&gt;
&lt;br /&gt;
This page catalogs GUI mockups, template applications, and app ideas from the [https://github.com/The-Perl-Cottage-Guild/wxPerl-wxGlade-Templates wxPerl-wxGlade-Templates] repository.&lt;br /&gt;
&lt;br /&gt;
The repository collects [https://sourceforge.net/projects/wxglade/ wxGlade] &amp;lt;code&amp;gt;.wxg&amp;lt;/code&amp;gt; project files and working Perl driver scripts that generate wxPerl GUIs directly from wxGlade output. These examples are intended to serve as starting points for real wxPerl desktop applications.&lt;br /&gt;
&lt;br /&gt;
For setup instructions, see:&lt;br /&gt;
&lt;br /&gt;
* [[Developing and Distributing wxPerl Applications on Windows|Developing and Distributing wxPerl Applications on Windows]]&lt;br /&gt;
&lt;br /&gt;
== Purpose ==&lt;br /&gt;
&lt;br /&gt;
The goal of this catalog is to make it easier for Perl programmers to find practical wxGlade GUI ideas that can be copied, studied, modified, and eventually turned into working wxPerl desktop applications.&lt;br /&gt;
&lt;br /&gt;
These examples are especially useful for:&lt;br /&gt;
&lt;br /&gt;
* learning wxGlade layout techniques&lt;br /&gt;
* testing wxPerl widgets on Windows&lt;br /&gt;
* building simple commercial desktop utilities&lt;br /&gt;
* creating GUI front ends for existing Perl scripts&lt;br /&gt;
* prototyping Windows-style applications with Perl&lt;br /&gt;
* preserving classic desktop UI patterns that still work well&lt;br /&gt;
&lt;br /&gt;
== Repository ==&lt;br /&gt;
&lt;br /&gt;
* Repository: [https://github.com/The-Perl-Cottage-Guild/wxPerl-wxGlade-Templates The-Perl-Cottage-Guild/wxPerl-wxGlade-Templates]&lt;br /&gt;
* Main setup guide: [[Developing and Distributing wxPerl Applications on Windows]]&lt;br /&gt;
&lt;br /&gt;
== AI-Assisted wxGlade Template Generation ==&lt;br /&gt;
&lt;br /&gt;
ChatGPT and similar AI tools can be useful for generating first-draft wxGlade XML files. This can be especially helpful when starting from a description such as:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;make a two-pane FTP client layout&amp;quot;&lt;br /&gt;
* &amp;quot;make a PuTTY-style configuration dialog&amp;quot;&lt;br /&gt;
* &amp;quot;make a Windows 95-style help viewer&amp;quot;&lt;br /&gt;
* &amp;quot;make a tabbed search interface with a results grid&amp;quot;&lt;br /&gt;
* &amp;quot;make a scientific data browser with a tree view, metadata pane, and plot area&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The generated XML should be treated as a starting point, not a finished application. Always open the file in wxGlade, inspect the widget tree, fix layout issues, and test the generated Perl code.&lt;br /&gt;
&lt;br /&gt;
AI-generated wxGlade files are most useful for:&lt;br /&gt;
&lt;br /&gt;
* quickly prototyping an interface idea&lt;br /&gt;
* creating a rough widget hierarchy&lt;br /&gt;
* experimenting with sizers and panels&lt;br /&gt;
* generating repetitive boilerplate layouts&lt;br /&gt;
* turning a hand-drawn mockup or written app idea into a first editable &amp;lt;code&amp;gt;.wxg&amp;lt;/code&amp;gt; file&lt;br /&gt;
&lt;br /&gt;
A practical workflow is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Describe the desired GUI → Generate wxGlade XML → Open in wxGlade → Fix layout/details → Generate Perl code → Add real Perl logic&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This does not replace wxGlade. It gives Perl programmers a faster way to get an initial layout into wxGlade so they can continue refining it visually.&lt;br /&gt;
&lt;br /&gt;
== Application Ideas and Templates ==&lt;br /&gt;
&lt;br /&gt;
=== Windows Help GUI ===&lt;br /&gt;
&lt;br /&gt;
[[File:Wxglade-windows-help-gui.png|900px|Windows Help GUI wxGlade template screenshot]]&lt;br /&gt;
&lt;br /&gt;
A classic Windows 95/98-style help viewer layout.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status:&#039;&#039;&#039; Template / mockup&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What it demonstrates:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* menu-driven application layout&lt;br /&gt;
* help/document viewer style&lt;br /&gt;
* navigation pane plus content pane&lt;br /&gt;
* classic Windows desktop design&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Possible Perl uses:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* local documentation viewer&lt;br /&gt;
* offline manual reader&lt;br /&gt;
* FAQ browser&lt;br /&gt;
* product support utility&lt;br /&gt;
* help system for a packaged Perl application&lt;br /&gt;
&lt;br /&gt;
=== Netscape 2.0 Clone ===&lt;br /&gt;
&lt;br /&gt;
[[File:Wxglade-netscape-clone.png|900px|Netscape 2.0 style wxGlade template screenshot]]&lt;br /&gt;
&lt;br /&gt;
A retro browser-style interface inspired by early Netscape.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status:&#039;&#039;&#039; Template / mockup&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What it demonstrates:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* menu bar&lt;br /&gt;
* toolbar buttons&lt;br /&gt;
* location/address field&lt;br /&gt;
* large content area&lt;br /&gt;
* status bar&lt;br /&gt;
* classic browser-style workflow&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Possible Perl uses:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* HTML documentation shell&lt;br /&gt;
* internal web viewer&lt;br /&gt;
* archive browser&lt;br /&gt;
* local content navigator&lt;br /&gt;
* kiosk-style viewer&lt;br /&gt;
&lt;br /&gt;
=== PuTTY Configuration Pane ===&lt;br /&gt;
&lt;br /&gt;
[[File:Wxglade-putty-configuration-pane.png|900px|PuTTY configuration pane wxGlade template screenshot]]&lt;br /&gt;
&lt;br /&gt;
A configuration dialog inspired by PuTTY&#039;s familiar settings layout.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status:&#039;&#039;&#039; Template / mockup&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What it demonstrates:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* category tree&lt;br /&gt;
* grouped settings panels&lt;br /&gt;
* form controls&lt;br /&gt;
* dialog buttons&lt;br /&gt;
* configuration-heavy application design&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Possible Perl uses:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* SSH profile manager&lt;br /&gt;
* rsync/SFTP launcher&lt;br /&gt;
* server connection manager&lt;br /&gt;
* backup configuration tool&lt;br /&gt;
* cluster login helper&lt;br /&gt;
* settings editor for a Perl utility&lt;br /&gt;
&lt;br /&gt;
=== WS-FTP Clone ===&lt;br /&gt;
&lt;br /&gt;
[[File:Wxglade-wsftp-clone.png|900px|WS-FTP style wxGlade template screenshot]]&lt;br /&gt;
&lt;br /&gt;
A classic two-pane file transfer client layout.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status:&#039;&#039;&#039; Template / mockup&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What it demonstrates:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* dual-pane file manager interface&lt;br /&gt;
* connection controls&lt;br /&gt;
* list views&lt;br /&gt;
* transfer queue area&lt;br /&gt;
* old-school but still-useful desktop file workflow&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Possible Perl uses:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* FTP/SFTP client&lt;br /&gt;
* deployment tool&lt;br /&gt;
* file sync GUI&lt;br /&gt;
* webhost upload utility&lt;br /&gt;
* batch transfer manager&lt;br /&gt;
* local/remote file comparison tool&lt;br /&gt;
&lt;br /&gt;
=== LimeWire-Style Interface ===&lt;br /&gt;
&lt;br /&gt;
[[File:Wxglade-limewire-style-interface.png|900px|LimeWire style wxGlade template screenshot]]&lt;br /&gt;
&lt;br /&gt;
A search-and-results interface inspired by classic peer-to-peer software.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status:&#039;&#039;&#039; Template / mockup&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What it demonstrates:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* search field&lt;br /&gt;
* results grid&lt;br /&gt;
* tabs&lt;br /&gt;
* sidebar navigation&lt;br /&gt;
* progress/list panes&lt;br /&gt;
* search-driven desktop workflow&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Possible Perl uses:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* archive search tool&lt;br /&gt;
* CPAN package browser&lt;br /&gt;
* media catalog&lt;br /&gt;
* dataset searcher&lt;br /&gt;
* internal document finder&lt;br /&gt;
* OCR search front end&lt;br /&gt;
* eBay/archive research tool&lt;br /&gt;
&lt;br /&gt;
=== NetCDF Explorer ===&lt;br /&gt;
&lt;br /&gt;
[[File:Wxglade-netcdf-explorer.png|900px|NetCDF Explorer wxGlade template screenshot]]&lt;br /&gt;
&lt;br /&gt;
A scientific data browser idea intended to pair well with Strawberry Perl, PDL, and scientific Perl tooling.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status:&#039;&#039;&#039; Template / app idea&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What it demonstrates:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* scientific data browser layout&lt;br /&gt;
* dataset navigation&lt;br /&gt;
* variable lists&lt;br /&gt;
* metadata panes&lt;br /&gt;
* plotting/viewer area&lt;br /&gt;
* workflow for technical users&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Possible Perl uses:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* NetCDF viewer&lt;br /&gt;
* PDL-based data explorer&lt;br /&gt;
* ADCIRC/ASGS result browser&lt;br /&gt;
* HDF/NetCDF inspection utility&lt;br /&gt;
* CSV/SQLite scientific data viewer&lt;br /&gt;
* teaching tool for scientific Perl&lt;br /&gt;
&lt;br /&gt;
=== NHC Advisory Explorer ===&lt;br /&gt;
&lt;br /&gt;
[[File:Wxglade-nhc-advisory-explorer-1.png|900px|NHC Advisory Explorer screenshot 1]]&lt;br /&gt;
&lt;br /&gt;
[[File:Wxglade-nhc-advisory-explorer-2.png|900px|NHC Advisory Explorer screenshot 2]]&lt;br /&gt;
&lt;br /&gt;
[[File:Wxglade-nhc-advisory-explorer-3.png|900px|NHC Advisory Explorer screenshot 3]]&lt;br /&gt;
&lt;br /&gt;
The NHC Advisory Explorer is a real wxPerl application rather than just a mockup. It has an available Windows executable release.&lt;br /&gt;
&lt;br /&gt;
* Release page: [https://github.com/StormSurgeLive/nhc-advisory-gui/releases NHC Advisory GUI releases]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status:&#039;&#039;&#039; Implemented; Windows EXE release available&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What it demonstrates:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* real wxPerl application workflow&lt;br /&gt;
* advisory navigation&lt;br /&gt;
* weather text/data display&lt;br /&gt;
* practical desktop packaging&lt;br /&gt;
* turning a wxGlade layout into a useful application&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Possible Perl uses:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* hurricane advisory browser&lt;br /&gt;
* emergency-management tool&lt;br /&gt;
* weather data front end&lt;br /&gt;
* wxPerl packaging example&lt;br /&gt;
* example of shipping a Perl GUI as a normal Windows executable&lt;br /&gt;
&lt;br /&gt;
== Suggested Template Categories ==&lt;br /&gt;
&lt;br /&gt;
=== Classic Windows Utilities ===&lt;br /&gt;
&lt;br /&gt;
Good examples:&lt;br /&gt;
&lt;br /&gt;
* Windows Help GUI&lt;br /&gt;
* PuTTY Configuration Pane&lt;br /&gt;
* WS-FTP Clone&lt;br /&gt;
&lt;br /&gt;
These are useful because they model familiar desktop patterns that ordinary Windows users already understand.&lt;br /&gt;
&lt;br /&gt;
Possible apps:&lt;br /&gt;
&lt;br /&gt;
* configuration editors&lt;br /&gt;
* log viewers&lt;br /&gt;
* backup managers&lt;br /&gt;
* system inventory tools&lt;br /&gt;
* connection/profile managers&lt;br /&gt;
* installer front ends&lt;br /&gt;
* INI / YAML / JSON editors&lt;br /&gt;
&lt;br /&gt;
=== Internet and Network Tools ===&lt;br /&gt;
&lt;br /&gt;
Good examples:&lt;br /&gt;
&lt;br /&gt;
* Netscape 2.0 Clone&lt;br /&gt;
* PuTTY Configuration Pane&lt;br /&gt;
* WS-FTP Clone&lt;br /&gt;
* LimeWire-style Interface&lt;br /&gt;
&lt;br /&gt;
Possible apps:&lt;br /&gt;
&lt;br /&gt;
* SSH/SFTP launcher&lt;br /&gt;
* website deployment GUI&lt;br /&gt;
* CPAN mirror browser&lt;br /&gt;
* FTP/SFTP batch uploader&lt;br /&gt;
* network scanner front end&lt;br /&gt;
* API test client&lt;br /&gt;
* simple web archive browser&lt;br /&gt;
&lt;br /&gt;
=== Search, Archive, and Catalog Tools ===&lt;br /&gt;
&lt;br /&gt;
Good examples:&lt;br /&gt;
&lt;br /&gt;
* LimeWire-style Interface&lt;br /&gt;
* Netscape 2.0 Clone&lt;br /&gt;
* Windows Help GUI&lt;br /&gt;
&lt;br /&gt;
Possible apps:&lt;br /&gt;
&lt;br /&gt;
* local document search&lt;br /&gt;
* eBay/archive search front end&lt;br /&gt;
* image OCR search tool&lt;br /&gt;
* CPAN module browser&lt;br /&gt;
* source-code search tool&lt;br /&gt;
* PDF/manual index browser&lt;br /&gt;
&lt;br /&gt;
=== Scientific and Engineering Tools ===&lt;br /&gt;
&lt;br /&gt;
Good examples:&lt;br /&gt;
&lt;br /&gt;
* NetCDF Explorer&lt;br /&gt;
* NHC Advisory Explorer&lt;br /&gt;
&lt;br /&gt;
Possible apps:&lt;br /&gt;
&lt;br /&gt;
* NetCDF/HDF data explorer&lt;br /&gt;
* PDL plotting front end&lt;br /&gt;
* ADCIRC/ASGS results viewer&lt;br /&gt;
* meteorological data browser&lt;br /&gt;
* CSV/SQLite data inspector&lt;br /&gt;
* sensor log viewer&lt;br /&gt;
* engineering calculator collection&lt;br /&gt;
&lt;br /&gt;
=== Commercial Desktop Utilities ===&lt;br /&gt;
&lt;br /&gt;
These are simple programs that could realistically be sold, bundled, or used internally by small businesses.&lt;br /&gt;
&lt;br /&gt;
Possible apps:&lt;br /&gt;
&lt;br /&gt;
* invoice helper&lt;br /&gt;
* customer lookup tool&lt;br /&gt;
* report generator&lt;br /&gt;
* file renamer&lt;br /&gt;
* batch image processor&lt;br /&gt;
* shipping label assistant&lt;br /&gt;
* data cleanup tool&lt;br /&gt;
* small SQLite-backed business app&lt;br /&gt;
* upload/deployment utility&lt;br /&gt;
* quote/order tracker&lt;br /&gt;
&lt;br /&gt;
== Suggested Repository Layout ==&lt;br /&gt;
&lt;br /&gt;
A useful structure for each template would be:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
template-name/&lt;br /&gt;
  README.md&lt;br /&gt;
  screenshot.png&lt;br /&gt;
  template.wxg&lt;br /&gt;
  generated/&lt;br /&gt;
    MyFrame.pm&lt;br /&gt;
  driver.pl&lt;br /&gt;
  dist/&lt;br /&gt;
    build-notes.md&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Recommended files:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;README.md&amp;lt;/code&amp;gt; - what the template demonstrates&lt;br /&gt;
* &amp;lt;code&amp;gt;template.wxg&amp;lt;/code&amp;gt; - wxGlade project file&lt;br /&gt;
* &amp;lt;code&amp;gt;driver.pl&amp;lt;/code&amp;gt; - minimal runnable Perl script&lt;br /&gt;
* &amp;lt;code&amp;gt;screenshot.png&amp;lt;/code&amp;gt; - current screenshot&lt;br /&gt;
* &amp;lt;code&amp;gt;build-notes.md&amp;lt;/code&amp;gt; - notes about Strawberry Perl, wxPerl, DLLs, packaging, or installer creation&lt;br /&gt;
&lt;br /&gt;
== Suggested README Fields for Each Template ==&lt;br /&gt;
&lt;br /&gt;
Each template should ideally document:&lt;br /&gt;
&lt;br /&gt;
; Name&lt;br /&gt;
: Human-readable name of the template or application idea.&lt;br /&gt;
&lt;br /&gt;
; Status&lt;br /&gt;
: Mockup, partial implementation, working prototype, packaged release, abandoned, etc.&lt;br /&gt;
&lt;br /&gt;
; Purpose&lt;br /&gt;
: What kind of application this layout is good for.&lt;br /&gt;
&lt;br /&gt;
; Widgets Used&lt;br /&gt;
: Major wxWidgets/wxPerl controls demonstrated.&lt;br /&gt;
&lt;br /&gt;
; Perl Modules&lt;br /&gt;
: Useful Perl modules that pair well with the template.&lt;br /&gt;
&lt;br /&gt;
; Tested On&lt;br /&gt;
: Strawberry Perl version, wxPerl version, Windows version, etc.&lt;br /&gt;
&lt;br /&gt;
; Packaging Notes&lt;br /&gt;
: Any notes about building an EXE or installer.&lt;br /&gt;
&lt;br /&gt;
; Screenshot&lt;br /&gt;
: Link or local file reference.&lt;br /&gt;
&lt;br /&gt;
== Widget Patterns to Demonstrate ==&lt;br /&gt;
&lt;br /&gt;
Future templates should try to cover common wxPerl/wxGlade patterns such as:&lt;br /&gt;
&lt;br /&gt;
* main frame with menu bar and status bar&lt;br /&gt;
* toolbar-driven application&lt;br /&gt;
* tabbed notebook interface&lt;br /&gt;
* split-pane application&lt;br /&gt;
* tree navigation plus detail panel&lt;br /&gt;
* dual-pane file manager&lt;br /&gt;
* modal configuration dialog&lt;br /&gt;
* wizard-style workflow&lt;br /&gt;
* searchable list/grid interface&lt;br /&gt;
* log viewer with controls&lt;br /&gt;
* progress dialog for long-running Perl tasks&lt;br /&gt;
* system tray utility&lt;br /&gt;
* SQLite-backed data-entry form&lt;br /&gt;
* plot/image viewer shell&lt;br /&gt;
&lt;br /&gt;
== Notes on Clone-Style Templates ==&lt;br /&gt;
&lt;br /&gt;
Some templates intentionally resemble well-known classic applications. These should be treated as UI studies and educational examples, not as trademarked product replacements.&lt;br /&gt;
&lt;br /&gt;
When turning a template into a real application:&lt;br /&gt;
&lt;br /&gt;
* use your own application name&lt;br /&gt;
* use your own icons and artwork&lt;br /&gt;
* avoid copying trademarks&lt;br /&gt;
* keep the useful layout pattern&lt;br /&gt;
* replace mockup controls with real Perl logic&lt;br /&gt;
&lt;br /&gt;
== Why This Matters ==&lt;br /&gt;
&lt;br /&gt;
wxPerl and wxGlade give Perl programmers a practical path to creating normal-looking desktop applications, especially on Windows. A good collection of templates lowers the barrier to entry by giving programmers something visual and runnable to start from.&lt;br /&gt;
&lt;br /&gt;
The real advantage is simple:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Use wxGlade to design the interface. Use Perl to make it useful. Package it so users never need to know it was Perl.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[Portal:GUIs with Perl]]&lt;br /&gt;
* [[Portal:Windows]]&lt;br /&gt;
* [[Developing and Distributing wxPerl Applications on Windows]]&lt;br /&gt;
* [[Portal:Perl for Profit]]&lt;br /&gt;
* [[Portal:Software Development Tools]]&lt;br /&gt;
* [[Portal:SciTech]]&lt;br /&gt;
* [[Portal:Perl Powered Programs (PPP)]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=GUI_ideas_for_use_with_wxGlade&amp;diff=345</id>
		<title>GUI ideas for use with wxGlade</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=GUI_ideas_for_use_with_wxGlade&amp;diff=345"/>
		<updated>2026-07-05T07:21:19Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;**NOTOC**&lt;br /&gt;
&lt;br /&gt;
= wxPerl / wxGlade Application Template Catalog =&lt;br /&gt;
&lt;br /&gt;
This page catalogs GUI mockups, template applications, and app ideas from the [https://github.com/The-Perl-Cottage-Guild/wxPerl-wxGlade-Templates wxPerl-wxGlade-Templates] repository.&lt;br /&gt;
&lt;br /&gt;
The repository collects [https://sourceforge.net/projects/wxglade/ wxGlade] &amp;lt;code&amp;gt;.wxg&amp;lt;/code&amp;gt; project files and working Perl driver scripts that generate wxPerl GUIs directly from wxGlade output. These examples are intended to serve as starting points for real wxPerl desktop applications.&lt;br /&gt;
&lt;br /&gt;
For setup instructions, see:&lt;br /&gt;
&lt;br /&gt;
* [[Developing and Distributing wxPerl Applications on Windows|Developing and Distributing wxPerl Applications on Windows]]&lt;br /&gt;
&lt;br /&gt;
== Purpose ==&lt;br /&gt;
&lt;br /&gt;
The goal of this catalog is to make it easier for Perl programmers to find practical wxGlade GUI ideas that can be copied, studied, modified, and eventually turned into working wxPerl desktop applications.&lt;br /&gt;
&lt;br /&gt;
These examples are especially useful for:&lt;br /&gt;
&lt;br /&gt;
* learning wxGlade layout techniques&lt;br /&gt;
* testing wxPerl widgets on Windows&lt;br /&gt;
* building simple commercial desktop utilities&lt;br /&gt;
* creating GUI front ends for existing Perl scripts&lt;br /&gt;
* prototyping Windows-style applications with Perl&lt;br /&gt;
* preserving classic desktop UI patterns that still work well&lt;br /&gt;
&lt;br /&gt;
== Repository ==&lt;br /&gt;
&lt;br /&gt;
* Repository: [https://github.com/The-Perl-Cottage-Guild/wxPerl-wxGlade-Templates The-Perl-Cottage-Guild/wxPerl-wxGlade-Templates]&lt;br /&gt;
* Main setup guide: [[Developing and Distributing wxPerl Applications on Windows]]&lt;br /&gt;
&lt;br /&gt;
== AI-Assisted wxGlade Template Generation ==&lt;br /&gt;
&lt;br /&gt;
ChatGPT and similar AI tools can be useful for generating first-draft wxGlade XML files. This can be especially helpful when starting from a description such as:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;make a two-pane FTP client layout&amp;quot;&lt;br /&gt;
* &amp;quot;make a PuTTY-style configuration dialog&amp;quot;&lt;br /&gt;
* &amp;quot;make a Windows 95-style help viewer&amp;quot;&lt;br /&gt;
* &amp;quot;make a tabbed search interface with a results grid&amp;quot;&lt;br /&gt;
* &amp;quot;make a scientific data browser with a tree view, metadata pane, and plot area&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The generated XML should be treated as a starting point, not a finished application. Always open the file in wxGlade, inspect the widget tree, fix layout issues, and test the generated Perl code.&lt;br /&gt;
&lt;br /&gt;
AI-generated wxGlade files are most useful for:&lt;br /&gt;
&lt;br /&gt;
* quickly prototyping an interface idea&lt;br /&gt;
* creating a rough widget hierarchy&lt;br /&gt;
* experimenting with sizers and panels&lt;br /&gt;
* generating repetitive boilerplate layouts&lt;br /&gt;
* turning a hand-drawn mockup or written app idea into a first editable &amp;lt;code&amp;gt;.wxg&amp;lt;/code&amp;gt; file&lt;br /&gt;
&lt;br /&gt;
A practical workflow is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Describe the desired GUI → Generate wxGlade XML → Open in wxGlade → Fix layout/details → Generate Perl code → Add real Perl logic&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This does not replace wxGlade. It gives Perl programmers a faster way to get an initial layout into wxGlade so they can continue refining it visually.&lt;br /&gt;
&lt;br /&gt;
== Application Ideas and Templates ==&lt;br /&gt;
&lt;br /&gt;
=== Windows Help GUI ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;max-width: 900px; margin: 0 0 1em 0;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://github.com/user-attachments/assets/041716c6-c4ab-4e21-93e1-117f58ffe0c0&amp;quot; alt=&amp;quot;Windows Help GUI wxGlade template screenshot&amp;quot; style=&amp;quot;max-width:100%; height:auto; border:1px solid #cccccc;&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A classic Windows 95/98-style help viewer layout.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status:&#039;&#039;&#039; Template / mockup&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What it demonstrates:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* menu-driven application layout&lt;br /&gt;
* help/document viewer style&lt;br /&gt;
* navigation pane plus content pane&lt;br /&gt;
* classic Windows desktop design&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Possible Perl uses:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* local documentation viewer&lt;br /&gt;
* offline manual reader&lt;br /&gt;
* FAQ browser&lt;br /&gt;
* product support utility&lt;br /&gt;
* help system for a packaged Perl application&lt;br /&gt;
&lt;br /&gt;
=== Netscape 2.0 Clone ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;max-width: 900px; margin: 0 0 1em 0;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://github.com/user-attachments/assets/c572a291-9a77-4c48-bf9f-c4823d04ba8f&amp;quot; alt=&amp;quot;Netscape 2.0 style wxGlade template screenshot&amp;quot; style=&amp;quot;max-width:100%; height:auto; border:1px solid #cccccc;&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A retro browser-style interface inspired by early Netscape.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status:&#039;&#039;&#039; Template / mockup&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What it demonstrates:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* menu bar&lt;br /&gt;
* toolbar buttons&lt;br /&gt;
* location/address field&lt;br /&gt;
* large content area&lt;br /&gt;
* status bar&lt;br /&gt;
* classic browser-style workflow&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Possible Perl uses:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* HTML documentation shell&lt;br /&gt;
* internal web viewer&lt;br /&gt;
* archive browser&lt;br /&gt;
* local content navigator&lt;br /&gt;
* kiosk-style viewer&lt;br /&gt;
&lt;br /&gt;
=== PuTTY Configuration Pane ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;max-width: 900px; margin: 0 0 1em 0;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://github.com/user-attachments/assets/c2e41b87-48d2-4269-8d8e-75a4861a78f7&amp;quot; alt=&amp;quot;PuTTY configuration pane wxGlade template screenshot&amp;quot; style=&amp;quot;max-width:100%; height:auto; border:1px solid #cccccc;&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A configuration dialog inspired by PuTTY&#039;s familiar settings layout.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status:&#039;&#039;&#039; Template / mockup&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What it demonstrates:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* category tree&lt;br /&gt;
* grouped settings panels&lt;br /&gt;
* form controls&lt;br /&gt;
* dialog buttons&lt;br /&gt;
* configuration-heavy application design&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Possible Perl uses:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* SSH profile manager&lt;br /&gt;
* rsync/SFTP launcher&lt;br /&gt;
* server connection manager&lt;br /&gt;
* backup configuration tool&lt;br /&gt;
* cluster login helper&lt;br /&gt;
* settings editor for a Perl utility&lt;br /&gt;
&lt;br /&gt;
=== WS-FTP Clone ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;max-width: 900px; margin: 0 0 1em 0;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://github.com/user-attachments/assets/0082bccb-7731-4d4b-bb55-de2c0b12f49a&amp;quot; alt=&amp;quot;WS-FTP style wxGlade template screenshot&amp;quot; style=&amp;quot;max-width:100%; height:auto; border:1px solid #cccccc;&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A classic two-pane file transfer client layout.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status:&#039;&#039;&#039; Template / mockup&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What it demonstrates:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* dual-pane file manager interface&lt;br /&gt;
* connection controls&lt;br /&gt;
* list views&lt;br /&gt;
* transfer queue area&lt;br /&gt;
* old-school but still-useful desktop file workflow&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Possible Perl uses:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* FTP/SFTP client&lt;br /&gt;
* deployment tool&lt;br /&gt;
* file sync GUI&lt;br /&gt;
* webhost upload utility&lt;br /&gt;
* batch transfer manager&lt;br /&gt;
* local/remote file comparison tool&lt;br /&gt;
&lt;br /&gt;
=== LimeWire-Style Interface ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;max-width: 900px; margin: 0 0 1em 0;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://github.com/user-attachments/assets/8d65a2e5-0472-4bb0-8c64-f87ddea9ec1b&amp;quot; alt=&amp;quot;LimeWire style wxGlade template screenshot&amp;quot; style=&amp;quot;max-width:100%; height:auto; border:1px solid #cccccc;&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A search-and-results interface inspired by classic peer-to-peer software.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status:&#039;&#039;&#039; Template / mockup&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What it demonstrates:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* search field&lt;br /&gt;
* results grid&lt;br /&gt;
* tabs&lt;br /&gt;
* sidebar navigation&lt;br /&gt;
* progress/list panes&lt;br /&gt;
* search-driven desktop workflow&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Possible Perl uses:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* archive search tool&lt;br /&gt;
* CPAN package browser&lt;br /&gt;
* media catalog&lt;br /&gt;
* dataset searcher&lt;br /&gt;
* internal document finder&lt;br /&gt;
* OCR search front end&lt;br /&gt;
* eBay/archive research tool&lt;br /&gt;
&lt;br /&gt;
=== NetCDF Explorer ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;max-width: 900px; margin: 0 0 1em 0;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://github.com/user-attachments/assets/da42b521-1b7a-491b-afb2-cd1f7f35c386&amp;quot; alt=&amp;quot;NetCDF Explorer wxGlade template screenshot&amp;quot; style=&amp;quot;max-width:100%; height:auto; border:1px solid #cccccc;&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A scientific data browser idea intended to pair well with Strawberry Perl, PDL, and scientific Perl tooling.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status:&#039;&#039;&#039; Template / app idea&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What it demonstrates:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* scientific data browser layout&lt;br /&gt;
* dataset navigation&lt;br /&gt;
* variable lists&lt;br /&gt;
* metadata panes&lt;br /&gt;
* plotting/viewer area&lt;br /&gt;
* workflow for technical users&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Possible Perl uses:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* NetCDF viewer&lt;br /&gt;
* PDL-based data explorer&lt;br /&gt;
* ADCIRC/ASGS result browser&lt;br /&gt;
* HDF/NetCDF inspection utility&lt;br /&gt;
* CSV/SQLite scientific data viewer&lt;br /&gt;
* teaching tool for scientific Perl&lt;br /&gt;
&lt;br /&gt;
=== NHC Advisory Explorer ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;max-width: 900px; margin: 0 0 1em 0;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://github.com/user-attachments/assets/0ef50655-841f-420f-be33-60c26a7cf721&amp;quot; alt=&amp;quot;NHC Advisory Explorer screenshot 1&amp;quot; style=&amp;quot;max-width:100%; height:auto; border:1px solid #cccccc;&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;max-width: 900px; margin: 0 0 1em 0;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://github.com/user-attachments/assets/377eb242-a17c-46f1-8ceb-5f2a4593c553&amp;quot; alt=&amp;quot;NHC Advisory Explorer screenshot 2&amp;quot; style=&amp;quot;max-width:100%; height:auto; border:1px solid #cccccc;&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;max-width: 900px; margin: 0 0 1em 0;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://github.com/user-attachments/assets/5813887a-8116-41da-bdc5-7340316b6999&amp;quot; alt=&amp;quot;NHC Advisory Explorer screenshot 3&amp;quot; style=&amp;quot;max-width:100%; height:auto; border:1px solid #cccccc;&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The NHC Advisory Explorer is a real wxPerl application rather than just a mockup. It has an available Windows executable release.&lt;br /&gt;
&lt;br /&gt;
* Release page: [https://github.com/StormSurgeLive/nhc-advisory-gui/releases NHC Advisory GUI releases]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status:&#039;&#039;&#039; Implemented; Windows EXE release available&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What it demonstrates:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* real wxPerl application workflow&lt;br /&gt;
* advisory navigation&lt;br /&gt;
* weather text/data display&lt;br /&gt;
* practical desktop packaging&lt;br /&gt;
* turning a wxGlade layout into a useful application&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Possible Perl uses:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* hurricane advisory browser&lt;br /&gt;
* emergency-management tool&lt;br /&gt;
* weather data front end&lt;br /&gt;
* wxPerl packaging example&lt;br /&gt;
* example of shipping a Perl GUI as a normal Windows executable&lt;br /&gt;
&lt;br /&gt;
== Suggested Template Categories ==&lt;br /&gt;
&lt;br /&gt;
=== Classic Windows Utilities ===&lt;br /&gt;
&lt;br /&gt;
Good examples:&lt;br /&gt;
&lt;br /&gt;
* Windows Help GUI&lt;br /&gt;
* PuTTY Configuration Pane&lt;br /&gt;
* WS-FTP Clone&lt;br /&gt;
&lt;br /&gt;
These are useful because they model familiar desktop patterns that ordinary Windows users already understand.&lt;br /&gt;
&lt;br /&gt;
Possible apps:&lt;br /&gt;
&lt;br /&gt;
* configuration editors&lt;br /&gt;
* log viewers&lt;br /&gt;
* backup managers&lt;br /&gt;
* system inventory tools&lt;br /&gt;
* connection/profile managers&lt;br /&gt;
* installer front ends&lt;br /&gt;
* INI / YAML / JSON editors&lt;br /&gt;
&lt;br /&gt;
=== Internet and Network Tools ===&lt;br /&gt;
&lt;br /&gt;
Good examples:&lt;br /&gt;
&lt;br /&gt;
* Netscape 2.0 Clone&lt;br /&gt;
* PuTTY Configuration Pane&lt;br /&gt;
* WS-FTP Clone&lt;br /&gt;
* LimeWire-style Interface&lt;br /&gt;
&lt;br /&gt;
Possible apps:&lt;br /&gt;
&lt;br /&gt;
* SSH/SFTP launcher&lt;br /&gt;
* website deployment GUI&lt;br /&gt;
* CPAN mirror browser&lt;br /&gt;
* FTP/SFTP batch uploader&lt;br /&gt;
* network scanner front end&lt;br /&gt;
* API test client&lt;br /&gt;
* simple web archive browser&lt;br /&gt;
&lt;br /&gt;
=== Search, Archive, and Catalog Tools ===&lt;br /&gt;
&lt;br /&gt;
Good examples:&lt;br /&gt;
&lt;br /&gt;
* LimeWire-style Interface&lt;br /&gt;
* Netscape 2.0 Clone&lt;br /&gt;
* Windows Help GUI&lt;br /&gt;
&lt;br /&gt;
Possible apps:&lt;br /&gt;
&lt;br /&gt;
* local document search&lt;br /&gt;
* eBay/archive search front end&lt;br /&gt;
* image OCR search tool&lt;br /&gt;
* CPAN module browser&lt;br /&gt;
* source-code search tool&lt;br /&gt;
* PDF/manual index browser&lt;br /&gt;
&lt;br /&gt;
=== Scientific and Engineering Tools ===&lt;br /&gt;
&lt;br /&gt;
Good examples:&lt;br /&gt;
&lt;br /&gt;
* NetCDF Explorer&lt;br /&gt;
* NHC Advisory Explorer&lt;br /&gt;
&lt;br /&gt;
Possible apps:&lt;br /&gt;
&lt;br /&gt;
* NetCDF/HDF data explorer&lt;br /&gt;
* PDL plotting front end&lt;br /&gt;
* ADCIRC/ASGS results viewer&lt;br /&gt;
* meteorological data browser&lt;br /&gt;
* CSV/SQLite data inspector&lt;br /&gt;
* sensor log viewer&lt;br /&gt;
* engineering calculator collection&lt;br /&gt;
&lt;br /&gt;
=== Commercial Desktop Utilities ===&lt;br /&gt;
&lt;br /&gt;
These are simple programs that could realistically be sold, bundled, or used internally by small businesses.&lt;br /&gt;
&lt;br /&gt;
Possible apps:&lt;br /&gt;
&lt;br /&gt;
* invoice helper&lt;br /&gt;
* customer lookup tool&lt;br /&gt;
* report generator&lt;br /&gt;
* file renamer&lt;br /&gt;
* batch image processor&lt;br /&gt;
* shipping label assistant&lt;br /&gt;
* data cleanup tool&lt;br /&gt;
* small SQLite-backed business app&lt;br /&gt;
* upload/deployment utility&lt;br /&gt;
* quote/order tracker&lt;br /&gt;
&lt;br /&gt;
== Suggested Repository Layout ==&lt;br /&gt;
&lt;br /&gt;
A useful structure for each template would be:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
template-name/&lt;br /&gt;
  README.md&lt;br /&gt;
  screenshot.png&lt;br /&gt;
  template.wxg&lt;br /&gt;
  generated/&lt;br /&gt;
    MyFrame.pm&lt;br /&gt;
  driver.pl&lt;br /&gt;
  dist/&lt;br /&gt;
    build-notes.md&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Recommended files:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;README.md&amp;lt;/code&amp;gt; - what the template demonstrates&lt;br /&gt;
* &amp;lt;code&amp;gt;template.wxg&amp;lt;/code&amp;gt; - wxGlade project file&lt;br /&gt;
* &amp;lt;code&amp;gt;driver.pl&amp;lt;/code&amp;gt; - minimal runnable Perl script&lt;br /&gt;
* &amp;lt;code&amp;gt;screenshot.png&amp;lt;/code&amp;gt; - current screenshot&lt;br /&gt;
* &amp;lt;code&amp;gt;build-notes.md&amp;lt;/code&amp;gt; - notes about Strawberry Perl, wxPerl, DLLs, packaging, or installer creation&lt;br /&gt;
&lt;br /&gt;
== Suggested README Fields for Each Template ==&lt;br /&gt;
&lt;br /&gt;
Each template should ideally document:&lt;br /&gt;
&lt;br /&gt;
; Name&lt;br /&gt;
: Human-readable name of the template or application idea.&lt;br /&gt;
&lt;br /&gt;
; Status&lt;br /&gt;
: Mockup, partial implementation, working prototype, packaged release, abandoned, etc.&lt;br /&gt;
&lt;br /&gt;
; Purpose&lt;br /&gt;
: What kind of application this layout is good for.&lt;br /&gt;
&lt;br /&gt;
; Widgets Used&lt;br /&gt;
: Major wxWidgets/wxPerl controls demonstrated.&lt;br /&gt;
&lt;br /&gt;
; Perl Modules&lt;br /&gt;
: Useful Perl modules that pair well with the template.&lt;br /&gt;
&lt;br /&gt;
; Tested On&lt;br /&gt;
: Strawberry Perl version, wxPerl version, Windows version, etc.&lt;br /&gt;
&lt;br /&gt;
; Packaging Notes&lt;br /&gt;
: Any notes about building an EXE or installer.&lt;br /&gt;
&lt;br /&gt;
; Screenshot&lt;br /&gt;
: Link or local file reference.&lt;br /&gt;
&lt;br /&gt;
== Widget Patterns to Demonstrate ==&lt;br /&gt;
&lt;br /&gt;
Future templates should try to cover common wxPerl/wxGlade patterns such as:&lt;br /&gt;
&lt;br /&gt;
* main frame with menu bar and status bar&lt;br /&gt;
* toolbar-driven application&lt;br /&gt;
* tabbed notebook interface&lt;br /&gt;
* split-pane application&lt;br /&gt;
* tree navigation plus detail panel&lt;br /&gt;
* dual-pane file manager&lt;br /&gt;
* modal configuration dialog&lt;br /&gt;
* wizard-style workflow&lt;br /&gt;
* searchable list/grid interface&lt;br /&gt;
* log viewer with controls&lt;br /&gt;
* progress dialog for long-running Perl tasks&lt;br /&gt;
* system tray utility&lt;br /&gt;
* SQLite-backed data-entry form&lt;br /&gt;
* plot/image viewer shell&lt;br /&gt;
&lt;br /&gt;
== Notes on Clone-Style Templates ==&lt;br /&gt;
&lt;br /&gt;
Some templates intentionally resemble well-known classic applications. These should be treated as UI studies and educational examples, not as trademarked product replacements.&lt;br /&gt;
&lt;br /&gt;
When turning a template into a real application:&lt;br /&gt;
&lt;br /&gt;
* use your own application name&lt;br /&gt;
* use your own icons and artwork&lt;br /&gt;
* avoid copying trademarks&lt;br /&gt;
* keep the useful layout pattern&lt;br /&gt;
* replace mockup controls with real Perl logic&lt;br /&gt;
&lt;br /&gt;
== Why This Matters ==&lt;br /&gt;
&lt;br /&gt;
wxPerl and wxGlade give Perl programmers a practical path to creating normal-looking desktop applications, especially on Windows. A good collection of templates lowers the barrier to entry by giving programmers something visual and runnable to start from.&lt;br /&gt;
&lt;br /&gt;
The real advantage is simple:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Use wxGlade to design the interface. Use Perl to make it useful. Package it so users never need to know it was Perl.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[Portal:GUIs with Perl]]&lt;br /&gt;
* [[Portal:Windows]]&lt;br /&gt;
* [[Developing and Distributing wxPerl Applications on Windows]]&lt;br /&gt;
* [[Portal:Perl for Profit]]&lt;br /&gt;
* [[Portal:Software Development Tools]]&lt;br /&gt;
* [[Portal:SciTech]]&lt;br /&gt;
* [[Portal:Perl Powered Programs (PPP)]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=GUI_ideas_for_use_with_wxGlade&amp;diff=344</id>
		<title>GUI ideas for use with wxGlade</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=GUI_ideas_for_use_with_wxGlade&amp;diff=344"/>
		<updated>2026-07-05T07:19:21Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;**NOTOC**&lt;br /&gt;
&lt;br /&gt;
= wxPerl / wxGlade Application Template Catalog =&lt;br /&gt;
&lt;br /&gt;
This page catalogs GUI mockups, template applications, and app ideas from the [https://github.com/The-Perl-Cottage-Guild/wxPerl-wxGlade-Templates wxPerl-wxGlade-Templates] repository.&lt;br /&gt;
&lt;br /&gt;
The repository collects [https://sourceforge.net/projects/wxglade/ wxGlade] &amp;lt;code&amp;gt;.wxg&amp;lt;/code&amp;gt; project files and working Perl driver scripts that generate wxPerl GUIs directly from wxGlade output. These examples are intended to serve as starting points for real wxPerl desktop applications.&lt;br /&gt;
&lt;br /&gt;
For setup instructions, see:&lt;br /&gt;
&lt;br /&gt;
* [[Developing and Distributing wxPerl Applications on Windows|Developing and Distributing wxPerl Applications on Windows]]&lt;br /&gt;
&lt;br /&gt;
== Purpose ==&lt;br /&gt;
&lt;br /&gt;
The goal of this catalog is to make it easier for Perl programmers to find practical wxGlade GUI ideas that can be copied, studied, modified, and eventually turned into working wxPerl desktop applications.&lt;br /&gt;
&lt;br /&gt;
These examples are especially useful for:&lt;br /&gt;
&lt;br /&gt;
* learning wxGlade layout techniques&lt;br /&gt;
* testing wxPerl widgets on Windows&lt;br /&gt;
* building simple commercial desktop utilities&lt;br /&gt;
* creating GUI front ends for existing Perl scripts&lt;br /&gt;
* prototyping Windows-style applications with Perl&lt;br /&gt;
* preserving classic desktop UI patterns that still work well&lt;br /&gt;
&lt;br /&gt;
== Repository ==&lt;br /&gt;
&lt;br /&gt;
* Repository: [https://github.com/The-Perl-Cottage-Guild/wxPerl-wxGlade-Templates The-Perl-Cottage-Guild/wxPerl-wxGlade-Templates]&lt;br /&gt;
* Main setup guide: [[Developing and Distributing wxPerl Applications on Windows]]&lt;br /&gt;
&lt;br /&gt;
== Application Ideas and Templates ==&lt;br /&gt;
&lt;br /&gt;
=== Windows Help GUI ===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/user-attachments/assets/041716c6-c4ab-4e21-93e1-117f58ffe0c0 Screenshot]&lt;br /&gt;
&lt;br /&gt;
A classic Windows 95/98-style help viewer layout.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status:&#039;&#039;&#039; Template / mockup&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What it demonstrates:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* menu-driven application layout&lt;br /&gt;
* help/document viewer style&lt;br /&gt;
* navigation pane plus content pane&lt;br /&gt;
* classic Windows desktop design&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Possible Perl uses:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* local documentation viewer&lt;br /&gt;
* offline manual reader&lt;br /&gt;
* FAQ browser&lt;br /&gt;
* product support utility&lt;br /&gt;
* help system for a packaged Perl application&lt;br /&gt;
&lt;br /&gt;
=== Netscape 2.0 Clone ===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/user-attachments/assets/c572a291-9a77-4c48-bf9f-c4823d04ba8f Screenshot]&lt;br /&gt;
&lt;br /&gt;
A retro browser-style interface inspired by early Netscape.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status:&#039;&#039;&#039; Template / mockup&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What it demonstrates:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* menu bar&lt;br /&gt;
* toolbar buttons&lt;br /&gt;
* location/address field&lt;br /&gt;
* large content area&lt;br /&gt;
* status bar&lt;br /&gt;
* classic browser-style workflow&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Possible Perl uses:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* HTML documentation shell&lt;br /&gt;
* internal web viewer&lt;br /&gt;
* archive browser&lt;br /&gt;
* local content navigator&lt;br /&gt;
* kiosk-style viewer&lt;br /&gt;
&lt;br /&gt;
=== PuTTY Configuration Pane ===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/user-attachments/assets/c2e41b87-48d2-4269-8d8e-75a4861a78f7 Screenshot]&lt;br /&gt;
&lt;br /&gt;
A configuration dialog inspired by PuTTY&#039;s familiar settings layout.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status:&#039;&#039;&#039; Template / mockup&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What it demonstrates:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* category tree&lt;br /&gt;
* grouped settings panels&lt;br /&gt;
* form controls&lt;br /&gt;
* dialog buttons&lt;br /&gt;
* configuration-heavy application design&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Possible Perl uses:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* SSH profile manager&lt;br /&gt;
* rsync/SFTP launcher&lt;br /&gt;
* server connection manager&lt;br /&gt;
* backup configuration tool&lt;br /&gt;
* cluster login helper&lt;br /&gt;
* settings editor for a Perl utility&lt;br /&gt;
&lt;br /&gt;
=== WS-FTP Clone ===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/user-attachments/assets/0082bccb-7731-4d4b-bb55-de2c0b12f49a Screenshot]&lt;br /&gt;
&lt;br /&gt;
A classic two-pane file transfer client layout.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status:&#039;&#039;&#039; Template / mockup&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What it demonstrates:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* dual-pane file manager interface&lt;br /&gt;
* connection controls&lt;br /&gt;
* list views&lt;br /&gt;
* transfer queue area&lt;br /&gt;
* old-school but still-useful desktop file workflow&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Possible Perl uses:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* FTP/SFTP client&lt;br /&gt;
* deployment tool&lt;br /&gt;
* file sync GUI&lt;br /&gt;
* webhost upload utility&lt;br /&gt;
* batch transfer manager&lt;br /&gt;
* local/remote file comparison tool&lt;br /&gt;
&lt;br /&gt;
=== LimeWire-Style Interface ===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/user-attachments/assets/8d65a2e5-0472-4bb0-8c64-f87ddea9ec1b Screenshot]&lt;br /&gt;
&lt;br /&gt;
A search-and-results interface inspired by classic peer-to-peer software.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status:&#039;&#039;&#039; Template / mockup&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What it demonstrates:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* search field&lt;br /&gt;
* results grid&lt;br /&gt;
* tabs&lt;br /&gt;
* sidebar navigation&lt;br /&gt;
* progress/list panes&lt;br /&gt;
* search-driven desktop workflow&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Possible Perl uses:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* archive search tool&lt;br /&gt;
* CPAN package browser&lt;br /&gt;
* media catalog&lt;br /&gt;
* dataset searcher&lt;br /&gt;
* internal document finder&lt;br /&gt;
* OCR search front end&lt;br /&gt;
* eBay/archive research tool&lt;br /&gt;
&lt;br /&gt;
=== NetCDF Explorer ===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/user-attachments/assets/da42b521-1b7a-491b-afb2-cd1f7f35c386 Screenshot]&lt;br /&gt;
&lt;br /&gt;
A scientific data browser idea intended to pair well with Strawberry Perl, PDL, and scientific Perl tooling.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status:&#039;&#039;&#039; Template / app idea&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What it demonstrates:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* scientific data browser layout&lt;br /&gt;
* dataset navigation&lt;br /&gt;
* variable lists&lt;br /&gt;
* metadata panes&lt;br /&gt;
* plotting/viewer area&lt;br /&gt;
* workflow for technical users&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Possible Perl uses:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* NetCDF viewer&lt;br /&gt;
* PDL-based data explorer&lt;br /&gt;
* ADCIRC/ASGS result browser&lt;br /&gt;
* HDF/NetCDF inspection utility&lt;br /&gt;
* CSV/SQLite scientific data viewer&lt;br /&gt;
* teaching tool for scientific Perl&lt;br /&gt;
&lt;br /&gt;
=== NHC Advisory Explorer ===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/user-attachments/assets/0ef50655-841f-420f-be33-60c26a7cf721 Screenshot 1]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/user-attachments/assets/377eb242-a17c-46f1-8ceb-5f2a4593c553 Screenshot 2]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/user-attachments/assets/5813887a-8116-41da-bdc5-7340316b6999 Screenshot 3]&lt;br /&gt;
&lt;br /&gt;
The NHC Advisory Explorer is a real wxPerl application rather than just a mockup. It has an available Windows executable release.&lt;br /&gt;
&lt;br /&gt;
* Release page: [https://github.com/StormSurgeLive/nhc-advisory-gui/releases NHC Advisory GUI releases]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Status:&#039;&#039;&#039; Implemented; Windows EXE release available&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What it demonstrates:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* real wxPerl application workflow&lt;br /&gt;
* advisory navigation&lt;br /&gt;
* weather text/data display&lt;br /&gt;
* practical desktop packaging&lt;br /&gt;
* turning a wxGlade layout into a useful application&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Possible Perl uses:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* hurricane advisory browser&lt;br /&gt;
* emergency-management tool&lt;br /&gt;
* weather data front end&lt;br /&gt;
* wxPerl packaging example&lt;br /&gt;
* example of shipping a Perl GUI as a normal Windows executable&lt;br /&gt;
&lt;br /&gt;
== Suggested Template Categories ==&lt;br /&gt;
&lt;br /&gt;
=== Classic Windows Utilities ===&lt;br /&gt;
&lt;br /&gt;
Good examples:&lt;br /&gt;
&lt;br /&gt;
* Windows Help GUI&lt;br /&gt;
* PuTTY Configuration Pane&lt;br /&gt;
* WS-FTP Clone&lt;br /&gt;
&lt;br /&gt;
These are useful because they model familiar desktop patterns that ordinary Windows users already understand.&lt;br /&gt;
&lt;br /&gt;
Possible apps:&lt;br /&gt;
&lt;br /&gt;
* configuration editors&lt;br /&gt;
* log viewers&lt;br /&gt;
* backup managers&lt;br /&gt;
* system inventory tools&lt;br /&gt;
* connection/profile managers&lt;br /&gt;
* installer front ends&lt;br /&gt;
* INI / YAML / JSON editors&lt;br /&gt;
&lt;br /&gt;
=== Internet and Network Tools ===&lt;br /&gt;
&lt;br /&gt;
Good examples:&lt;br /&gt;
&lt;br /&gt;
* Netscape 2.0 Clone&lt;br /&gt;
* PuTTY Configuration Pane&lt;br /&gt;
* WS-FTP Clone&lt;br /&gt;
* LimeWire-style Interface&lt;br /&gt;
&lt;br /&gt;
Possible apps:&lt;br /&gt;
&lt;br /&gt;
* SSH/SFTP launcher&lt;br /&gt;
* website deployment GUI&lt;br /&gt;
* CPAN mirror browser&lt;br /&gt;
* FTP/SFTP batch uploader&lt;br /&gt;
* network scanner front end&lt;br /&gt;
* API test client&lt;br /&gt;
* simple web archive browser&lt;br /&gt;
&lt;br /&gt;
=== Search, Archive, and Catalog Tools ===&lt;br /&gt;
&lt;br /&gt;
Good examples:&lt;br /&gt;
&lt;br /&gt;
* LimeWire-style Interface&lt;br /&gt;
* Netscape 2.0 Clone&lt;br /&gt;
* Windows Help GUI&lt;br /&gt;
&lt;br /&gt;
Possible apps:&lt;br /&gt;
&lt;br /&gt;
* local document search&lt;br /&gt;
* eBay/archive search front end&lt;br /&gt;
* image OCR search tool&lt;br /&gt;
* CPAN module browser&lt;br /&gt;
* source-code search tool&lt;br /&gt;
* PDF/manual index browser&lt;br /&gt;
&lt;br /&gt;
=== Scientific and Engineering Tools ===&lt;br /&gt;
&lt;br /&gt;
Good examples:&lt;br /&gt;
&lt;br /&gt;
* NetCDF Explorer&lt;br /&gt;
* NHC Advisory Explorer&lt;br /&gt;
&lt;br /&gt;
Possible apps:&lt;br /&gt;
&lt;br /&gt;
* NetCDF/HDF data explorer&lt;br /&gt;
* PDL plotting front end&lt;br /&gt;
* ADCIRC/ASGS results viewer&lt;br /&gt;
* meteorological data browser&lt;br /&gt;
* CSV/SQLite data inspector&lt;br /&gt;
* sensor log viewer&lt;br /&gt;
* engineering calculator collection&lt;br /&gt;
&lt;br /&gt;
=== Commercial Desktop Utilities ===&lt;br /&gt;
&lt;br /&gt;
These are simple programs that could realistically be sold, bundled, or used internally by small businesses.&lt;br /&gt;
&lt;br /&gt;
Possible apps:&lt;br /&gt;
&lt;br /&gt;
* invoice helper&lt;br /&gt;
* customer lookup tool&lt;br /&gt;
* report generator&lt;br /&gt;
* file renamer&lt;br /&gt;
* batch image processor&lt;br /&gt;
* shipping label assistant&lt;br /&gt;
* data cleanup tool&lt;br /&gt;
* small SQLite-backed business app&lt;br /&gt;
* upload/deployment utility&lt;br /&gt;
* quote/order tracker&lt;br /&gt;
&lt;br /&gt;
== Suggested Repository Layout ==&lt;br /&gt;
&lt;br /&gt;
A useful structure for each template would be:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
template-name/&lt;br /&gt;
  README.md&lt;br /&gt;
  screenshot.png&lt;br /&gt;
  template.wxg&lt;br /&gt;
  generated/&lt;br /&gt;
    MyFrame.pm&lt;br /&gt;
  driver.pl&lt;br /&gt;
  dist/&lt;br /&gt;
    build-notes.md&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Recommended files:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;README.md&amp;lt;/code&amp;gt; - what the template demonstrates&lt;br /&gt;
* &amp;lt;code&amp;gt;template.wxg&amp;lt;/code&amp;gt; - wxGlade project file&lt;br /&gt;
* &amp;lt;code&amp;gt;driver.pl&amp;lt;/code&amp;gt; - minimal runnable Perl script&lt;br /&gt;
* &amp;lt;code&amp;gt;screenshot.png&amp;lt;/code&amp;gt; - current screenshot&lt;br /&gt;
* &amp;lt;code&amp;gt;build-notes.md&amp;lt;/code&amp;gt; - notes about Strawberry Perl, wxPerl, DLLs, packaging, or installer creation&lt;br /&gt;
&lt;br /&gt;
== Suggested README Fields for Each Template ==&lt;br /&gt;
&lt;br /&gt;
Each template should ideally document:&lt;br /&gt;
&lt;br /&gt;
; Name&lt;br /&gt;
: Human-readable name of the template or application idea.&lt;br /&gt;
&lt;br /&gt;
; Status&lt;br /&gt;
: Mockup, partial implementation, working prototype, packaged release, abandoned, etc.&lt;br /&gt;
&lt;br /&gt;
; Purpose&lt;br /&gt;
: What kind of application this layout is good for.&lt;br /&gt;
&lt;br /&gt;
; Widgets Used&lt;br /&gt;
: Major wxWidgets/wxPerl controls demonstrated.&lt;br /&gt;
&lt;br /&gt;
; Perl Modules&lt;br /&gt;
: Useful Perl modules that pair well with the template.&lt;br /&gt;
&lt;br /&gt;
; Tested On&lt;br /&gt;
: Strawberry Perl version, wxPerl version, Windows version, etc.&lt;br /&gt;
&lt;br /&gt;
; Packaging Notes&lt;br /&gt;
: Any notes about building an EXE or installer.&lt;br /&gt;
&lt;br /&gt;
; Screenshot&lt;br /&gt;
: Link or local file reference.&lt;br /&gt;
&lt;br /&gt;
== Widget Patterns to Demonstrate ==&lt;br /&gt;
&lt;br /&gt;
Future templates should try to cover common wxPerl/wxGlade patterns such as:&lt;br /&gt;
&lt;br /&gt;
* main frame with menu bar and status bar&lt;br /&gt;
* toolbar-driven application&lt;br /&gt;
* tabbed notebook interface&lt;br /&gt;
* split-pane application&lt;br /&gt;
* tree navigation plus detail panel&lt;br /&gt;
* dual-pane file manager&lt;br /&gt;
* modal configuration dialog&lt;br /&gt;
* wizard-style workflow&lt;br /&gt;
* searchable list/grid interface&lt;br /&gt;
* log viewer with controls&lt;br /&gt;
* progress dialog for long-running Perl tasks&lt;br /&gt;
* system tray utility&lt;br /&gt;
* SQLite-backed data-entry form&lt;br /&gt;
* plot/image viewer shell&lt;br /&gt;
&lt;br /&gt;
== Notes on Clone-Style Templates ==&lt;br /&gt;
&lt;br /&gt;
Some templates intentionally resemble well-known classic applications. These should be treated as UI studies and educational examples, not as trademarked product replacements.&lt;br /&gt;
&lt;br /&gt;
When turning a template into a real application:&lt;br /&gt;
&lt;br /&gt;
* use your own application name&lt;br /&gt;
* use your own icons and artwork&lt;br /&gt;
* avoid copying trademarks&lt;br /&gt;
* keep the useful layout pattern&lt;br /&gt;
* replace mockup controls with real Perl logic&lt;br /&gt;
&lt;br /&gt;
== Why This Matters ==&lt;br /&gt;
&lt;br /&gt;
wxPerl and wxGlade give Perl programmers a practical path to creating normal-looking desktop applications, especially on Windows. A good collection of templates lowers the barrier to entry by giving programmers something visual and runnable to start from.&lt;br /&gt;
&lt;br /&gt;
The real advantage is simple:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Use wxGlade to design the interface. Use Perl to make it useful. Package it so users never need to know it was Perl.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== AI-Assisted wxGlade Template Generation ==&lt;br /&gt;
&lt;br /&gt;
ChatGPT and similar AI tools can be useful for generating first-draft wxGlade XML files. This can be especially helpful when starting from a description such as:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;make a two-pane FTP client layout&amp;quot;&lt;br /&gt;
* &amp;quot;make a PuTTY-style configuration dialog&amp;quot;&lt;br /&gt;
* &amp;quot;make a Windows 95-style help viewer&amp;quot;&lt;br /&gt;
* &amp;quot;make a tabbed search interface with a results grid&amp;quot;&lt;br /&gt;
* &amp;quot;make a scientific data browser with a tree view, metadata pane, and plot area&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The generated XML should be treated as a starting point, not a finished application. Always open the file in wxGlade, inspect the widget tree, fix layout issues, and test the generated Perl code.&lt;br /&gt;
&lt;br /&gt;
AI-generated wxGlade files are most useful for:&lt;br /&gt;
&lt;br /&gt;
* quickly prototyping an interface idea&lt;br /&gt;
* creating a rough widget hierarchy&lt;br /&gt;
* experimenting with sizers and panels&lt;br /&gt;
* generating repetitive boilerplate layouts&lt;br /&gt;
* turning a hand-drawn mockup or written app idea into a first editable &amp;lt;code&amp;gt;.wxg&amp;lt;/code&amp;gt; file&lt;br /&gt;
&lt;br /&gt;
A practical workflow is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Describe the desired GUI → Generate wxGlade XML → Open in wxGlade → Fix layout/details → Generate Perl code → Add real Perl logic&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This does not replace wxGlade. It gives Perl programmers a faster way to get an initial layout into wxGlade so they can continue refining it visually.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[Portal:GUIs with Perl]]&lt;br /&gt;
* [[Portal:Windows]]&lt;br /&gt;
* [[Developing and Distributing wxPerl Applications on Windows]]&lt;br /&gt;
* [[Portal:Perl for Profit]]&lt;br /&gt;
* [[Portal:Software Development Tools]]&lt;br /&gt;
* [[Portal:SciTech]]&lt;br /&gt;
* [[Portal:Perl Powered Programs (PPP)]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=GUI_ideas_for_use_with_wxGlade&amp;diff=343</id>
		<title>GUI ideas for use with wxGlade</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=GUI_ideas_for_use_with_wxGlade&amp;diff=343"/>
		<updated>2026-07-05T07:16:46Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;**NOTOC**  = wxPerl / wxGlade Application Template Catalog =  This page catalogs GUI mockups, template applications, and app ideas from the [https://github.com/The-Perl-Cottage-Guild/wxPerl-wxGlade-Templates wxPerl-wxGlade-Templates] repository.  The repository is intended as a place to collect [https://sourceforge.net/projects/wxglade/ wxGlade] &amp;lt;code&amp;gt;.wxg&amp;lt;/code&amp;gt; project files and working Perl driver scripts that generate wxPerl GUIs directly from wxGlade output. These e...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;**NOTOC**&lt;br /&gt;
&lt;br /&gt;
= wxPerl / wxGlade Application Template Catalog =&lt;br /&gt;
&lt;br /&gt;
This page catalogs GUI mockups, template applications, and app ideas from the [https://github.com/The-Perl-Cottage-Guild/wxPerl-wxGlade-Templates wxPerl-wxGlade-Templates] repository.&lt;br /&gt;
&lt;br /&gt;
The repository is intended as a place to collect [https://sourceforge.net/projects/wxglade/ wxGlade] &amp;lt;code&amp;gt;.wxg&amp;lt;/code&amp;gt; project files and working Perl driver scripts that generate wxPerl GUIs directly from wxGlade output. These examples are meant to serve as starting points for real wxPerl applications.&lt;br /&gt;
&lt;br /&gt;
For setup instructions, see:&lt;br /&gt;
&lt;br /&gt;
* [[Developing and Distributing wxPerl Applications on Windows|Developing and Distributing wxPerl Applications on Windows]]&lt;br /&gt;
&lt;br /&gt;
== Purpose ==&lt;br /&gt;
&lt;br /&gt;
The goal of this catalog is to make it easier for Perl programmers to find practical wxGlade GUI ideas that can be copied, studied, modified, and eventually turned into working wxPerl desktop applications.&lt;br /&gt;
&lt;br /&gt;
These examples are especially useful for:&lt;br /&gt;
&lt;br /&gt;
* learning wxGlade layout techniques&lt;br /&gt;
* testing wxPerl widgets on Windows&lt;br /&gt;
* building simple commercial desktop utilities&lt;br /&gt;
* creating GUI front ends for existing Perl scripts&lt;br /&gt;
* prototyping Windows-style applications with Perl&lt;br /&gt;
* preserving classic desktop UI patterns that still work well&lt;br /&gt;
&lt;br /&gt;
== Repository ==&lt;br /&gt;
&lt;br /&gt;
* Repository: [https://github.com/The-Perl-Cottage-Guild/wxPerl-wxGlade-Templates The-Perl-Cottage-Guild/wxPerl-wxGlade-Templates]&lt;br /&gt;
* Main setup guide: [[Developing and Distributing wxPerl Applications on Windows]]&lt;br /&gt;
* Intended files:&lt;br /&gt;
  ** wxGlade &amp;lt;code&amp;gt;.wxg&amp;lt;/code&amp;gt; XML project files&lt;br /&gt;
  ** generated Perl GUI code&lt;br /&gt;
  ** Perl driver scripts&lt;br /&gt;
  ** screenshots&lt;br /&gt;
  ** notes on packaging or distribution, where applicable&lt;br /&gt;
&lt;br /&gt;
== Template and Application Idea Gallery ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
! Application / Template&lt;br /&gt;
! Screenshot&lt;br /&gt;
! Type&lt;br /&gt;
! Status&lt;br /&gt;
! What It Demonstrates&lt;br /&gt;
&lt;br /&gt;
| ! Possible Perl Uses                                                                                                                 |&lt;br /&gt;
| ------------------------------------------------------------------------------------------------------------------------------------ |&lt;br /&gt;
| &#039;&#039;&#039;Windows Help GUI&#039;&#039;&#039;                                                                                                               |&lt;br /&gt;
| [https://github.com/user-attachments/assets/041716c6-c4ab-4e21-93e1-117f58ffe0c0 Screenshot]                                         |&lt;br /&gt;
| Classic Windows-style help viewer                                                                                                    |&lt;br /&gt;
| Template / mockup                                                                                                                    |&lt;br /&gt;
| Menus, toolbar-like navigation, tree/list navigation, document pane, classic Windows 95/98-style layout                              |&lt;br /&gt;
| Documentation viewer, local help browser, offline manual reader, FAQ viewer, product support utility                                 |&lt;br /&gt;
| -                                                                                                                                    |&lt;br /&gt;
| &#039;&#039;&#039;Netscape 2.0 Clone&#039;&#039;&#039;                                                                                                             |&lt;br /&gt;
| [https://github.com/user-attachments/assets/c572a291-9a77-4c48-bf9f-c4823d04ba8f Screenshot]                                         |&lt;br /&gt;
| Retro web browser UI study                                                                                                           |&lt;br /&gt;
| Template / mockup                                                                                                                    |&lt;br /&gt;
| Menu bar, toolbar buttons, location field, large content area, status bar, classic browser layout                                    |&lt;br /&gt;
| HTML documentation shell, internal web viewer, archive browser, kiosk-style viewer, local content navigator                          |&lt;br /&gt;
| -                                                                                                                                    |&lt;br /&gt;
| &#039;&#039;&#039;PuTTY Configuration Pane&#039;&#039;&#039;                                                                                                       |&lt;br /&gt;
| [https://github.com/user-attachments/assets/c2e41b87-48d2-4269-8d8e-75a4861a78f7 Screenshot]                                         |&lt;br /&gt;
| Configuration dialog                                                                                                                 |&lt;br /&gt;
| Template / mockup                                                                                                                    |&lt;br /&gt;
| Category tree, settings panels, grouped options, form controls, dialog buttons                                                       |&lt;br /&gt;
| SSH profile manager, rsync/SFTP launcher, server connection manager, backup configuration tool, cluster login helper                 |&lt;br /&gt;
| -                                                                                                                                    |&lt;br /&gt;
| &#039;&#039;&#039;WS-FTP Clone&#039;&#039;&#039;                                                                                                                   |&lt;br /&gt;
| [https://github.com/user-attachments/assets/0082bccb-7731-4d4b-bb55-de2c0b12f49a Screenshot]                                         |&lt;br /&gt;
| File transfer client UI                                                                                                              |&lt;br /&gt;
| Template / mockup                                                                                                                    |&lt;br /&gt;
| Dual-pane file manager layout, connection controls, list views, transfer queue area                                                  |&lt;br /&gt;
| FTP/SFTP client, deployment tool, file sync GUI, webhost upload utility, batch transfer manager                                      |&lt;br /&gt;
| -                                                                                                                                    |&lt;br /&gt;
| &#039;&#039;&#039;LimeWire-Style Interface&#039;&#039;&#039;                                                                                                       |&lt;br /&gt;
| [https://github.com/user-attachments/assets/8d65a2e5-0472-4bb0-8c64-f87ddea9ec1b Screenshot]                                         |&lt;br /&gt;
| Search/download manager UI                                                                                                           |&lt;br /&gt;
| Template / mockup                                                                                                                    |&lt;br /&gt;
| Search field, results grid, tabs, sidebar navigation, progress/list panes                                                            |&lt;br /&gt;
| Archive search tool, CPAN package browser, media catalog, dataset searcher, internal document finder                                 |&lt;br /&gt;
| -                                                                                                                                    |&lt;br /&gt;
| &#039;&#039;&#039;NetCDF Explorer&#039;&#039;&#039;                                                                                                                |&lt;br /&gt;
| [https://github.com/user-attachments/assets/da42b521-1b7a-491b-afb2-cd1f7f35c386 Screenshot]                                         |&lt;br /&gt;
| Scientific data browser                                                                                                              |&lt;br /&gt;
| Template / app idea                                                                                                                  |&lt;br /&gt;
| Dataset navigation, variable lists, metadata panes, plotting/viewer layout, scientific workflow UI                                   |&lt;br /&gt;
| NetCDF viewer, PDL-based data explorer, ADCIRC/ASGS result browser, HDF/NetCDF inspection utility, teaching tool for scientific Perl |&lt;br /&gt;
| -                                                                                                                                    |&lt;br /&gt;
| &#039;&#039;&#039;NHC Advisory Explorer&#039;&#039;&#039;                                                                                                          |&lt;br /&gt;
| [https://github.com/user-attachments/assets/0ef50655-841f-420f-be33-60c26a7cf721 Screenshot 1]&amp;lt;br /&amp;gt;                                 |&lt;br /&gt;
| [https://github.com/user-attachments/assets/377eb242-a17c-46f1-8ceb-5f2a4593c553 Screenshot 2]&amp;lt;br /&amp;gt;                                 |&lt;br /&gt;
| [https://github.com/user-attachments/assets/5813887a-8116-41da-bdc5-7340316b6999 Screenshot 3]                                       |&lt;br /&gt;
| Weather / hurricane advisory viewer                                                                                                  |&lt;br /&gt;
| Implemented; Windows EXE release available                                                                                           |&lt;br /&gt;
| Real-world wxPerl application, advisory navigation, text display, data retrieval, desktop packaging                                  |&lt;br /&gt;
| Hurricane advisory browser, emergency-management tool, weather data front end, example of shipping a wxPerl Windows executable       |&lt;br /&gt;
| }                                                                                                                                    |&lt;br /&gt;
&lt;br /&gt;
== Implemented Example ==&lt;br /&gt;
&lt;br /&gt;
=== NHC Advisory Explorer ===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;NHC Advisory Explorer&#039;&#039;&#039; is currently the strongest example in the collection because it has moved beyond a mockup and has an actual Windows executable release.&lt;br /&gt;
&lt;br /&gt;
* Project release: [https://github.com/StormSurgeLive/nhc-advisory-gui/releases NHC Advisory GUI releases]&lt;br /&gt;
* Useful as an example of:&lt;br /&gt;
  ** turning a wxGlade layout into a working wxPerl application&lt;br /&gt;
  ** packaging a Perl GUI for Windows users&lt;br /&gt;
  ** building a practical domain-specific desktop tool&lt;br /&gt;
  ** using Perl as the hidden implementation advantage behind a normal-looking Windows application&lt;br /&gt;
&lt;br /&gt;
== Suggested Template Categories ==&lt;br /&gt;
&lt;br /&gt;
As the repository grows, templates can be grouped into the following categories.&lt;br /&gt;
&lt;br /&gt;
=== Classic Windows Utilities ===&lt;br /&gt;
&lt;br /&gt;
Good examples:&lt;br /&gt;
&lt;br /&gt;
* Windows Help GUI&lt;br /&gt;
* PuTTY Configuration Pane&lt;br /&gt;
* WS-FTP Clone&lt;br /&gt;
&lt;br /&gt;
These are useful because they model familiar desktop patterns that ordinary Windows users already understand.&lt;br /&gt;
&lt;br /&gt;
Possible apps:&lt;br /&gt;
&lt;br /&gt;
* configuration editors&lt;br /&gt;
* log viewers&lt;br /&gt;
* backup managers&lt;br /&gt;
* system inventory tools&lt;br /&gt;
* connection/profile managers&lt;br /&gt;
* installer front ends&lt;br /&gt;
* INI / YAML / JSON editors&lt;br /&gt;
&lt;br /&gt;
=== Internet and Network Tools ===&lt;br /&gt;
&lt;br /&gt;
Good examples:&lt;br /&gt;
&lt;br /&gt;
* Netscape 2.0 Clone&lt;br /&gt;
* PuTTY Configuration Pane&lt;br /&gt;
* WS-FTP Clone&lt;br /&gt;
* LimeWire-style Interface&lt;br /&gt;
&lt;br /&gt;
Possible apps:&lt;br /&gt;
&lt;br /&gt;
* SSH/SFTP launcher&lt;br /&gt;
* website deployment GUI&lt;br /&gt;
* CPAN mirror browser&lt;br /&gt;
* FTP/SFTP batch uploader&lt;br /&gt;
* network scanner front end&lt;br /&gt;
* API test client&lt;br /&gt;
* simple web archive browser&lt;br /&gt;
&lt;br /&gt;
=== Search, Archive, and Catalog Tools ===&lt;br /&gt;
&lt;br /&gt;
Good examples:&lt;br /&gt;
&lt;br /&gt;
* LimeWire-style Interface&lt;br /&gt;
* Netscape 2.0 Clone&lt;br /&gt;
* Windows Help GUI&lt;br /&gt;
&lt;br /&gt;
Possible apps:&lt;br /&gt;
&lt;br /&gt;
* local document search&lt;br /&gt;
* eBay/archive search front end&lt;br /&gt;
* image OCR search tool&lt;br /&gt;
* CPAN module browser&lt;br /&gt;
* source-code search tool&lt;br /&gt;
* PDF/manual index browser&lt;br /&gt;
&lt;br /&gt;
=== Scientific and Engineering Tools ===&lt;br /&gt;
&lt;br /&gt;
Good examples:&lt;br /&gt;
&lt;br /&gt;
* NetCDF Explorer&lt;br /&gt;
* NHC Advisory Explorer&lt;br /&gt;
&lt;br /&gt;
Possible apps:&lt;br /&gt;
&lt;br /&gt;
* NetCDF/HDF data explorer&lt;br /&gt;
* PDL plotting front end&lt;br /&gt;
* ADCIRC/ASGS results viewer&lt;br /&gt;
* meteorological data browser&lt;br /&gt;
* CSV/SQLite data inspector&lt;br /&gt;
* sensor log viewer&lt;br /&gt;
* engineering calculator collection&lt;br /&gt;
&lt;br /&gt;
=== Commercial Desktop Utilities ===&lt;br /&gt;
&lt;br /&gt;
These are simple programs that could realistically be sold, bundled, or used internally by small businesses.&lt;br /&gt;
&lt;br /&gt;
Possible apps:&lt;br /&gt;
&lt;br /&gt;
* invoice helper&lt;br /&gt;
* customer lookup tool&lt;br /&gt;
* report generator&lt;br /&gt;
* file renamer&lt;br /&gt;
* batch image processor&lt;br /&gt;
* shipping label assistant&lt;br /&gt;
* data cleanup tool&lt;br /&gt;
* small SQLite-backed business app&lt;br /&gt;
* upload/deployment utility&lt;br /&gt;
* quote/order tracker&lt;br /&gt;
&lt;br /&gt;
== Suggested Repository Layout ==&lt;br /&gt;
&lt;br /&gt;
A useful structure for each template would be:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
template-name/&lt;br /&gt;
  README.md&lt;br /&gt;
  screenshot.png&lt;br /&gt;
  template.wxg&lt;br /&gt;
  generated/&lt;br /&gt;
    MyFrame.pm&lt;br /&gt;
  driver.pl&lt;br /&gt;
  dist/&lt;br /&gt;
    build-notes.md&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Recommended files:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;README.md&amp;lt;/code&amp;gt; - what the template demonstrates&lt;br /&gt;
* &amp;lt;code&amp;gt;template.wxg&amp;lt;/code&amp;gt; - wxGlade project file&lt;br /&gt;
* &amp;lt;code&amp;gt;driver.pl&amp;lt;/code&amp;gt; - minimal runnable Perl script&lt;br /&gt;
* &amp;lt;code&amp;gt;screenshot.png&amp;lt;/code&amp;gt; - current screenshot&lt;br /&gt;
* &amp;lt;code&amp;gt;build-notes.md&amp;lt;/code&amp;gt; - notes about Strawberry Perl, wxPerl, DLLs, packaging, or installer creation&lt;br /&gt;
&lt;br /&gt;
== Suggested README Fields for Each Template ==&lt;br /&gt;
&lt;br /&gt;
Each template should ideally document:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
! Field&lt;br /&gt;
&lt;br /&gt;
| ! Description                                                                        |&lt;br /&gt;
| ------------------------------------------------------------------------------------ |&lt;br /&gt;
| &#039;&#039;&#039;Name&#039;&#039;&#039;                                                                           |&lt;br /&gt;
| Human-readable name of the template or application idea                              |&lt;br /&gt;
| -                                                                                    |&lt;br /&gt;
| &#039;&#039;&#039;Status&#039;&#039;&#039;                                                                         |&lt;br /&gt;
| Mockup, partial implementation, working prototype, packaged release, abandoned, etc. |&lt;br /&gt;
| -                                                                                    |&lt;br /&gt;
| &#039;&#039;&#039;Purpose&#039;&#039;&#039;                                                                        |&lt;br /&gt;
| What kind of application this layout is good for                                     |&lt;br /&gt;
| -                                                                                    |&lt;br /&gt;
| &#039;&#039;&#039;Widgets Used&#039;&#039;&#039;                                                                   |&lt;br /&gt;
| Major wxWidgets/wxPerl controls demonstrated                                         |&lt;br /&gt;
| -                                                                                    |&lt;br /&gt;
| &#039;&#039;&#039;Perl Modules&#039;&#039;&#039;                                                                   |&lt;br /&gt;
| Useful Perl modules that pair well with the template                                 |&lt;br /&gt;
| -                                                                                    |&lt;br /&gt;
| &#039;&#039;&#039;Tested On&#039;&#039;&#039;                                                                      |&lt;br /&gt;
| Strawberry Perl version, wxPerl version, Windows version, etc.                       |&lt;br /&gt;
| -                                                                                    |&lt;br /&gt;
| &#039;&#039;&#039;Packaging Notes&#039;&#039;&#039;                                                                |&lt;br /&gt;
| Any notes about building an EXE or installer                                         |&lt;br /&gt;
| -                                                                                    |&lt;br /&gt;
| &#039;&#039;&#039;Screenshot&#039;&#039;&#039;                                                                     |&lt;br /&gt;
| Link or local file reference                                                         |&lt;br /&gt;
| }                                                                                    |&lt;br /&gt;
&lt;br /&gt;
== Widget Patterns to Demonstrate ==&lt;br /&gt;
&lt;br /&gt;
Future templates should try to cover common wxPerl/wxGlade patterns such as:&lt;br /&gt;
&lt;br /&gt;
* main frame with menu bar and status bar&lt;br /&gt;
* toolbar-driven application&lt;br /&gt;
* tabbed notebook interface&lt;br /&gt;
* split-pane application&lt;br /&gt;
* tree navigation plus detail panel&lt;br /&gt;
* dual-pane file manager&lt;br /&gt;
* modal configuration dialog&lt;br /&gt;
* wizard-style workflow&lt;br /&gt;
* searchable list/grid interface&lt;br /&gt;
* log viewer with controls&lt;br /&gt;
* progress dialog for long-running Perl tasks&lt;br /&gt;
* system tray utility&lt;br /&gt;
* SQLite-backed data-entry form&lt;br /&gt;
* plot/image viewer shell&lt;br /&gt;
&lt;br /&gt;
== Notes on Clone-Style Templates ==&lt;br /&gt;
&lt;br /&gt;
Some templates intentionally resemble well-known classic applications. These should be treated as UI studies and educational examples, not as trademarked product replacements.&lt;br /&gt;
&lt;br /&gt;
When turning a template into a real application:&lt;br /&gt;
&lt;br /&gt;
* use your own application name&lt;br /&gt;
* use your own icons and artwork&lt;br /&gt;
* avoid copying trademarks&lt;br /&gt;
* keep the useful layout pattern&lt;br /&gt;
* replace mockup controls with real Perl logic&lt;br /&gt;
&lt;br /&gt;
== Why This Matters ==&lt;br /&gt;
&lt;br /&gt;
wxPerl and wxGlade give Perl programmers a practical path to creating normal-looking desktop applications, especially on Windows. A good collection of templates lowers the barrier to entry by giving programmers something visual and runnable to start from.&lt;br /&gt;
&lt;br /&gt;
The real advantage is simple:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Use wxGlade to design the interface. Use Perl to make it useful. Package it so users never need to know it was Perl.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[Portal:GUIs with Perl]]&lt;br /&gt;
* [[Portal:Windows]]&lt;br /&gt;
* [[Developing and Distributing wxPerl Applications on Windows]]&lt;br /&gt;
* [[Portal:Perl for Profit]]&lt;br /&gt;
* [[Portal:Software Development Tools]]&lt;br /&gt;
* [[Portal:SciTech]]&lt;br /&gt;
* [[Portal:Perl Powered Programs (PPP)]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=Developing_and_Distributing_wxPerl_Applications_on_Windows&amp;diff=342</id>
		<title>Developing and Distributing wxPerl Applications on Windows</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=Developing_and_Distributing_wxPerl_Applications_on_Windows&amp;diff=342"/>
		<updated>2026-07-05T07:16:37Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* Getting wxGlade Help */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
This article is part of the Perl Lazarus Project, an effort to make Windows GUI development in Perl practical again by identifying a working toolchain for creating, packaging, and distributing desktop applications.&lt;br /&gt;
&lt;br /&gt;
The name is a nod both to Lazarus of the Bible and to the excellent Lazarus IDE for Free Pascal. Perl does not currently have a direct equivalent to that kind of unified rapid application development environment, so this project focuses on documenting a practical path using the tools that are available today.&lt;br /&gt;
&lt;br /&gt;
This page is about installing wxPerl under Strawberry Perl for application development and distribution as a Windows executable.&lt;br /&gt;
&lt;br /&gt;
=== Why Perl GUIs, why Windows? ===&lt;br /&gt;
This is a critical ability for any freelance Perl developer, since it complements a Perl journeyman&#039;s ability to do many things on servers, such as create remote services. Being able to transfer these skills to the desktop environment is especially useful on Windows, where users are accustomed to paying for software. In short, Perl programmers who want to make a living on their own need to know how to create and distribute Windows GUI applications; this page covers a large piece of how to do that.&lt;br /&gt;
[[File:FreeAPIGUI.png|alt=wxPerl GUI running on Windows as a double-clickable EXE file!|thumb|wxPerl GUI running on Windows as a double-clickable EXE file! Created using wxGlade, a RAD-ish tool. See [https://github.com/oodler577/FreeAPI-Perl-API-Explorer more images] on Github.]]&lt;br /&gt;
Instructions are provided with the versions detailed below. If there are newer versions of any of the modules, you may try them out (of course); but understand they have not been tried and shown to work like the version combinations below.&lt;br /&gt;
&lt;br /&gt;
=== [https://dev.to/sciurius/wxperl-revival-5fde See] the original call for a [https://dev.to/sciurius/wxperl-revival-5fde wxPerl Revival]! ===&lt;br /&gt;
&lt;br /&gt;
=== Git Repository of wxGlade / wxPerl Examples ===&lt;br /&gt;
https://github.com/The-Perl-Cottage-Guild/wxPerl-Templates&lt;br /&gt;
== Installing wxPerl on Windows for Development ==&lt;br /&gt;
&lt;br /&gt;
These instructions are for you, not your customers! Give them a clickable installer like Windows users expect (see how here!)&lt;br /&gt;
&lt;br /&gt;
=== General Steps ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Step&lt;br /&gt;
! Component&lt;br /&gt;
! Link&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Strawberry Perl&lt;br /&gt;
| [https://strawberryperl.com/releases.html releases]&lt;br /&gt;
| Install Strawberry Perl first. For the newer PDL-based build, use the PDL ZIP edition rather than the standard MSI.&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Alien::wxWidgets&lt;br /&gt;
| [https://github.com/sciurius/perl-Alien-wxWidgets/releases/ github]&lt;br /&gt;
| Install after Strawberry Perl and wxWidgets are available.&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Wx / wxPerl&lt;br /&gt;
| [https://github.com/sciurius/wxPerl/releases github]&lt;br /&gt;
| Install last; this is the Perl binding used by wxPerl applications.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== More Specific Version Combinations with Detailed Instructions &amp;amp; Links ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Status&lt;br /&gt;
! Strawberry Perl&lt;br /&gt;
! wxWidgets&lt;br /&gt;
! Alien::wxWidgets&lt;br /&gt;
! Wx / wxPerl&lt;br /&gt;
! Detailed Instructions / Links&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Latest / Experimental PDL Build&lt;br /&gt;
| [https://github.com/StrawberryPerl/Perl-Dist-Strawberry/releases/tag/SP_54221_64bit 5.42.2.1 64-bit UCRT, PDL ZIP edition]&lt;br /&gt;
| [https://github.com/wxWidgets/wxWidgets/releases/tag/v3.2.9 3.2.9]&lt;br /&gt;
| [https://github.com/sciurius/perl-Alien-wxWidgets/releases/tag/R0.73 0.73]&lt;br /&gt;
| [https://github.com/sciurius/wxPerl/releases/tag/R3.009 3.009]&lt;br /&gt;
| [[Wx 3.009, Alien::wxWidgets 0.73, Strawberry Perl 5.42.2.1 PDL]]&lt;br /&gt;
| Newer PDL-based build path. The PDL ZIP conventionally unpacks under &amp;lt;code&amp;gt;C:\sw\pdl&amp;lt;/code&amp;gt;. Add &amp;lt;code&amp;gt;C:\sw\pdl\c\bin&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;C:\sw\pdl\perl\site\bin&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;C:\sw\pdl\perl\bin&amp;lt;/code&amp;gt; to the active &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt;. This combination should be treated as experimental until the full build and packaging workflow is verified.&lt;br /&gt;
|-&lt;br /&gt;
| Upstream PowerShell Helper Script&lt;br /&gt;
| [https://github.com/StrawberryPerl/Perl-Dist-Strawberry/releases/tag/SP_54201_64bit 5.42.0.1 64-bit portable, by default]&lt;br /&gt;
| [https://github.com/wxWidgets/wxWidgets/releases/tag/v3.2.9 3.2.9]&lt;br /&gt;
| [https://github.com/sciurius/perl-Alien-wxWidgets/releases/tag/R0.73 0.73]&lt;br /&gt;
| [https://github.com/sciurius/wxPerl/releases/tag/R3.009 3.009]&lt;br /&gt;
| [https://github.com/sciurius/wxGitHubAction/blob/main/script/wxPerl-Windows.ps1 wxPerl-Windows.ps1]&lt;br /&gt;
| Read the script carefully before running it. As written, it installs portable Strawberry Perl, builds wxWidgets from source, manually installs Alien::wxWidgets configuration, then builds Wx. It does not use the PDL ZIP by default, so the script needs adjustment for the &amp;lt;code&amp;gt;C:\sw\pdl&amp;lt;/code&amp;gt; PDL layout. It is best treated as an upstream build recipe or advanced helper, not as the primary beginner installation path.&lt;br /&gt;
|-&lt;br /&gt;
| Previously Tested&lt;br /&gt;
| [https://github.com/StrawberryPerl/Perl-Dist-Strawberry/releases/tag/SP_54021_64bit_UCRT 5.40.2.1 64-bit UCRT MSI]&lt;br /&gt;
| See detailed instructions page&lt;br /&gt;
| [https://github.com/sciurius/perl-Alien-wxWidgets/releases/tag/R0.71 0.71]&lt;br /&gt;
| [https://github.com/sciurius/wxPerl/releases/tag/R3.008 3.008]&lt;br /&gt;
| [[Wx 3.008, Alien::wxWidgets 0.71, Strawberry Perl 5.40.2.1]]&lt;br /&gt;
| Previously documented working combination. This is the safer reference path until the newer PDL build is fully verified.&lt;br /&gt;
|-&lt;br /&gt;
| Archive&lt;br /&gt;
| [https://github.com/StrawberryPerl/Perl-Dist-Strawberry/releases/tag/SP_54001_64bit_UCRT 5.40.0.1 64-bit UCRT MSI]&lt;br /&gt;
| See detailed instructions page&lt;br /&gt;
| [https://github.com/sciurius/perl-Alien-wxWidgets/releases/tag/R0.70 0.70]&lt;br /&gt;
| [https://github.com/sciurius/wxPerl/releases/tag/R3.005 3.005]&lt;br /&gt;
| [[Wx 3.005, Alien::wxWidgets 0.70, Strawberry Perl 5.40.0.1]]&lt;br /&gt;
| Earlier archived working combination. Keep this entry for historical reference and troubleshooting regressions.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Verify Installation ==&lt;br /&gt;
The information provided in this section ought to be unrelated to the verified version combination outlined in the Installation section above. &lt;br /&gt;
&lt;br /&gt;
=== Install Wx::Demo ===&lt;br /&gt;
Wx::Demo is nice demonstration application, highlight many (if not all) of the wxWidget features available via xPerl.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;C:\&amp;gt; cpanm --verbose Wx::Demo&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
.. then once installed, run it with this command (which is available in the PATH already),&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;C:\&amp;gt; wxperl_demo.pl&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== wxGlade - a Perl Friendly Cross-Platform GUI Builder ==&lt;br /&gt;
&lt;br /&gt;
=== Trigger Warning: wxGlade is written in wxPython, so you must install it if you want to use wxGlade to build your GUI. ===&lt;br /&gt;
Totally worth it!&lt;br /&gt;
&lt;br /&gt;
=== Install wxGlade ===&lt;br /&gt;
[https://sourceforge.net/projects/wxglade/ wxGlade] is a GUI builder for wxWidgets applications. It is written in Python, but critically supports outputting Perl code. It is actively developed, and the developer is very responsive on Github to bugs and feature requests. It is the closest thing we have in Perl to a rapid application development environment, in the spirit of [https://www.lazarus-ide.org/ Lazarus] for Free Pascal.&lt;br /&gt;
&lt;br /&gt;
Developers interested in earlier wxWidgets GUI builders and older Perl-capable tools can also see the [[Developing and Distributing wxPerl Applications on Windows#Longer List of RAD Tools and GUI Builders|longer list of RAD tools and GUI builders]] near the end of this page, including some useful but discontinued, archived, or historically important projects.&lt;br /&gt;
=== Step 1 - Install Python 3.10.11 for Windows ===&lt;br /&gt;
Install via following link,&lt;br /&gt;
&lt;br /&gt;
https://www.python.org/ftp/python/3.10.11/python-3.10.11-amd64.exe ([https://www.python.org/downloads/windows/ linked here])&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
# Last tested on &#039;&#039;&#039;25 Jan 2025&#039;&#039;&#039;, although later versions of Python 3 were tested (specifically, 3.12.8), wxPython would install but not run wxGlade properly&lt;br /&gt;
# install as admin (checkbox should be already checked; also opt&#039;d to add &amp;quot;python&amp;quot; to the PATH)&lt;br /&gt;
&lt;br /&gt;
=== Step 2 - Install wxPython ===&lt;br /&gt;
&lt;br /&gt;
# open up the Windows CMD window&lt;br /&gt;
# use pip,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;C:\&amp;gt; pip install wxPython&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: if this fails, you may need to reinstall pip; but it should be available in the CMD window. Based on experience, pip doesn&#039;t seem to be available via the Strawberry Perl terminal, so be sure to get a standard Windows CMD window to do this part.&lt;br /&gt;
&lt;br /&gt;
=== Step 3 - Download and unzip wxGlade ===&lt;br /&gt;
You should probably check if there is a [https://github.com/wxGlade/wxGlade/releases &#039;&#039;&#039;new release&#039;&#039;&#039;], but to get the latest at the time of this update, download: https://github.com/wxGlade/wxGlade/archive/refs/tags/v1.1.1.zip (may want to also try [https://downloads.sourceforge.net/project/wxglade/wxglade/1.1.0/wxGlade-1.1.0_win_amd64.zip?ts=gAAAAABnlJMXBQlBk2CGz7kaN89RrjqS4GEmSk7spuPtf-gFaK_VqcAQAiFCT24GT-SYsq8SVVmCjmhkzq0VycLd7ofhOQoVlA%3D%3D&amp;amp;r=https%3A%2F%2Fsourceforge.net%2Fprojects%2Fwxglade%2Ffiles%2Fwxglade%2F1.1.0%2FwxGlade-1.1.0_win_amd64.zip%2Fdownload%3Fuse_mirror%3Dphoenixnap%26use_mirror%3Dphoenixnap%26r%3Dhttps%253A%252F%252Fsourceforge.net%252Fprojects%252Fwxglade%252Ffiles%252Fwxglade%252F1.1.0%252F wxGlade-1.1.0_win_amd64.zip] - the difference between the two is unclear, but both are tested and both work.)&lt;br /&gt;
[[File:WxgladeWinExample.png|alt=wxGlade running on Windows, showing the design window of a GUI about to be run using wxPerl!|thumb|wxGlade running on Windows, showing the design window of a GUI about to be run using wxPerl!]]&lt;br /&gt;
Via Windows CMD terminal, navigate to the unzipped directory and run the command,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;C:\&amp;gt; python wxglade.py&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Getting wxGlade Help ===&lt;br /&gt;
&#039;&#039;wxGlade&#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;s developer is responsive on Github and there is a semi-active email list on SourceForge,&lt;br /&gt;
&lt;br /&gt;
* Github repo - https://github.com/wxGlade/wxGlade&lt;br /&gt;
* email list - https://sourceforge.net/p/wxglade/mailman/wxglade-general/&lt;br /&gt;
* See [[GUI ideas for use with wxGlade]] if you don&#039;t know where to start!&lt;br /&gt;
&lt;br /&gt;
== Development Workflow Notes ==&lt;br /&gt;
This section outlines some different workflows that are found among members of the community who use wxPerl. Like any workflow, the based on level of experience and particular application.&lt;br /&gt;
[[File:Wxperl-workflow.png|alt=Example layout with Strawberry Perl for running the application and Makefile, vim under MSYS2 for more streamlined workflow. wxGlade is under there, too; when there is a change to the GUI, the project is saved and code generated using &amp;quot;ctrl-g&amp;quot;. vim is used to edit the code and will update whenever wxGlade updates it, if you do it right your custom code won&#039;t get clobbered.|thumb|Example layout with Strawberry Perl for running the application and Makefile, vim under MSYS2 for more streamlined workflow. wxGlade is under there, too; when there is a change to the GUI, the project is saved and code generated using &amp;quot;ctrl-g&amp;quot;. vim is used to edit the code and will update whenever wxGlade updates it, if you do it right your custom code won&#039;t get clobbered.]]&lt;br /&gt;
&lt;br /&gt;
=== Editor and &amp;lt;code&amp;gt;git&amp;lt;/code&amp;gt; Options on Windows ===&lt;br /&gt;
The best way to recreate the &amp;quot;edit-run-fix&amp;quot; workflow of code editing enjoyed by vim users is to install [https://www.msys2.org/ MSYS2] and use its terminal to install both &amp;lt;code&amp;gt;vim&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;git&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;pacman -S vim git&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: you do not want to run the Perl code generated by wxGlade inside of the MSYS2 terminal. When you install &amp;lt;code&amp;gt;git&amp;lt;/code&amp;gt;, it will install its own perl and clobber Strawberry Perl in your &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt;. Run the Perl code for your project from a Strawberry Perl terminal.&lt;br /&gt;
&lt;br /&gt;
Just like the editor options in Windows is not ideal, neither are the Git options (GH&#039;s &amp;quot;Git for Windows&amp;quot; is exceptionally awkward to use, not sure how to it is possible to be good in &amp;quot;Windows&amp;quot; tbh; YMMV.) Under MSYS2&#039;s terminal,  you may install &amp;lt;code&amp;gt;git&amp;lt;/code&amp;gt; and use it as you may be accustomed on Linux. You may want to generate an ssh-key, which will be vailable in `~/.ssh/` by default. So you can do all the normal git workflow stuff from there once your key is created and added to your Github keyset.&lt;br /&gt;
&lt;br /&gt;
==== Pro Tip: Turn Off MSYS2&#039;s &amp;lt;code&amp;gt;vim&amp;lt;/code&amp;gt; Mouse Support and Auto/Smart Indenting ====&lt;br /&gt;
I have found that this is required to &amp;quot;copy&amp;quot; text from the MSYS2 &amp;lt;code&amp;gt;vim&amp;lt;/code&amp;gt;, you may not need it. But by default &amp;lt;code&amp;gt;vim&amp;lt;/code&amp;gt; is aware of the mouse.&lt;br /&gt;
&lt;br /&gt;
To turn all that off, put the following lines in your &amp;lt;code&amp;gt;~/.vimrc&amp;lt;/code&amp;gt; file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set mouse=&lt;br /&gt;
set noautoindent&lt;br /&gt;
set nosmartindent&lt;br /&gt;
set nocindent&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Using wxGlade&#039;s &amp;quot;Single file&amp;quot; + &amp;quot;&#039;&#039;Keep user code&#039;&#039;&amp;quot; Options ===&lt;br /&gt;
wxGlade has some settings that tells it to not overwrite changes you made in the output Perl script, but &#039;&#039;&#039;beware&#039;&#039;&#039; - this option is not on by default. That means that means that your file will get overwritten if you tell wxGlade to generate new code again. The general workflow is as follows:&lt;br /&gt;
&lt;br /&gt;
# start a new project (or open an existing one)&lt;br /&gt;
# click on the root &amp;quot;Application&amp;quot; object in the object viewer&lt;br /&gt;
# find the output pane, set the output to be &amp;quot;&#039;&#039;&#039;Perl&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
# set version of wxWidgets to be &amp;quot;&#039;&#039;&#039;3.0&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
# [[File:Applicationsettings.png|alt=Recommended settings for using wxGlade for Perl development.|thumb|Recommended settings for using wxGlade for Perl development.]]check &amp;quot;Keep user code&amp;quot;, this will make sure wxGlade doesn&#039;t overwrite code that is outside the bounds of very clearly marked blocks in the code&lt;br /&gt;
&lt;br /&gt;
=== Using wxGlade&#039;s &amp;quot;&#039;&#039;Separate file for each class&#039;&#039;&amp;quot; Option ===&lt;br /&gt;
... to do&lt;br /&gt;
&lt;br /&gt;
== Creating Windows EXEs ==&lt;br /&gt;
This section is more of a work in progress since a reliable method of distributing single file executables (or developing installation packages for Windows) is still an open question, there is hope that this will end up being a relatively smooth process. Needless to say, it is critical for Perl developer to be able to distribute Perl based GUI applications as single file (.exe) or via installation on Windows. The client should NOT need to be running through any of the instructions above to run a program that you would like to sell them for actual money.&lt;br /&gt;
&lt;br /&gt;
Below are the initial instructions for generating an EXE file. There are also many ways that wxPerl developers go about doing, based on their use case and experience.&lt;br /&gt;
&lt;br /&gt;
=== PAR::Package, App::PP::Autolink, and Wx::Perl::Packager ===&lt;br /&gt;
&lt;br /&gt;
==== Step 1 - Install PAR::Package, App::PP::Autolink, and Wx::Perl::Packager ====&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;C:\&amp;gt; cpanm --verbose PAR::Package App::PP::Autolink Wx::Perl::Packager&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: &amp;lt;code&amp;gt;pp_autolink&amp;lt;/code&amp;gt;, provided by &amp;lt;code&amp;gt;App::PP::Autolink&amp;lt;/code&amp;gt;, has proven to be absolutely critical to finding the required DLLs that need to be added manually to the &amp;lt;code&amp;gt;wxpar&amp;lt;/code&amp;gt; command below via the &amp;lt;code&amp;gt;--link&amp;lt;/code&amp;gt; flag.&lt;br /&gt;
&lt;br /&gt;
==== Step 2 - Generate the EXE ====&lt;br /&gt;
Assuming you have a Perl script generated either via wxGlade (see above) or one you have created/updated by hand, the command is as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;C:\&amp;gt; wxpar YOURPROGRAM.pl -o YOURPROGRAM.exe&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Important Notes About wxGlade Generated Code =====&lt;br /&gt;
# Earlier versions of wxGlade introduced an improper idiom at the bottom of the generated Perl script that caused a problem when running via a PAR::Packed executable. TLDR: remove the &amp;quot;unless(caller)&amp;quot; block and just run the Wx event loop unfettered. For more information, please read the [https://metacpan.org/dist/PAR/view/lib/PAR/FAQ.pod#If-I-try-to-compile-my-wxGlade-generated-script%2C-it-doesn%27t-run.-What%27s-wrong%3F PAR::FAQ.]&lt;br /&gt;
# Earlier versions of wxGlade also used a non-Exporter import tag that wxpar could not properly follow; see the code &amp;quot;before&amp;quot; and &amp;quot;after&amp;quot; below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
use Wx qw[:allclasses];&lt;br /&gt;
use strict;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
package main;&lt;br /&gt;
&lt;br /&gt;
unless(caller){&lt;br /&gt;
    my $local = Wx::Locale-&amp;gt;new(&amp;quot;English&amp;quot;, &amp;quot;en&amp;quot;, &amp;quot;en&amp;quot;); # replace with ??&lt;br /&gt;
    $local-&amp;gt;AddCatalog(&amp;quot;app&amp;quot;); # replace with the appropriate catalog name&lt;br /&gt;
&lt;br /&gt;
    my $app = MyApp-&amp;gt;new();&lt;br /&gt;
    $app-&amp;gt;MainLoop();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Should be modified to look like the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
use Wx;&lt;br /&gt;
use strict;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
package main;&lt;br /&gt;
&lt;br /&gt;
my $local = Wx::Locale-&amp;gt;new(&amp;quot;English&amp;quot;, &amp;quot;en&amp;quot;, &amp;quot;en&amp;quot;); # replace with ??&lt;br /&gt;
$local-&amp;gt;AddCatalog(&amp;quot;app&amp;quot;); # replace with the appropriate catalog name&lt;br /&gt;
&lt;br /&gt;
my $app = MyApp-&amp;gt;new();&lt;br /&gt;
$app-&amp;gt;MainLoop();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See [https://github.com/wxGlade/wxGlade/issues/568 this Github issue] for wxGlade, where both were fixed. At the time of this writing, the changes have not been put out in an official release; but they are applied in the master branch.&lt;br /&gt;
&lt;br /&gt;
==== Special Cases ====&lt;br /&gt;
&lt;br /&gt;
===== &amp;lt;code&amp;gt;Makefile&amp;lt;/code&amp;gt; for an Application uses HTTP::Tiny and calls out to SSL-enabled sites =====&lt;br /&gt;
Example - [https://github.com/StormSurgeLive/nhc-advisory-gui/blob/master/asgs-storm-bug.pl https://github.com/StormSurgeLive/nhc-advisory-gui/]&lt;br /&gt;
&lt;br /&gt;
(copied from the [https://github.com/StormSurgeLive/nhc-advisory-gui/blob/master/Makefile Makefile]) - Note, mentions using [https://metacpan.org/pod/App::PP::Autolink App::PP::Autolink] to suss out required DLLs (provides &amp;lt;code&amp;gt;pp_autolink&amp;lt;/code&amp;gt;, which helped!)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
all:&lt;br /&gt;
        wxpar --verbose -o ./dist/nhc-explorer.exe -l c:/strawberry/c/bin/libcrypto-3-x64__.dll -l c:/strawberry/c/bin/zlib1__.dll -l c:/strawberry/c/bin/libssl-3-x64__.dll ./asgs-storm-bug.pl --gui&lt;br /&gt;
        wxpar --verbose -o ./dist/DEBUG-nhc-explorer.exe -l c:/strawberry/c/bin/libcrypto-3-x64__.dll -l c:/strawberry/c/bin/zlib1__.dll -l c:/strawberry/c/bin/libssl-3-x64__.dll ./asgs-storm-bug.pl&lt;br /&gt;
&lt;br /&gt;
# It was an adventure finding all the dependencies related to the wxpar command,&lt;br /&gt;
# particularly those around what was needed. The basic process entailed:&lt;br /&gt;
# 1. use wxpar, which generates an options file with all the Wx DLLs&lt;br /&gt;
# 2. install App::PP::Autolink, which provides the utility &amp;quot;pp_autolink&amp;quot;; this&lt;br /&gt;
#    utility scans the .pl file you&#039;re packing, in this case, &amp;quot;asgs-storm-bug.pl&amp;quot;,&lt;br /&gt;
#    for DLLs - lo&#039; and behold, it found the ones I needed; in particular the critical&lt;br /&gt;
#    one that was not getting picked up by pp or wxpar, &amp;quot;libcrypto-3-x64___.dll!&amp;quot;&lt;br /&gt;
# 3. run the &amp;quot;wxpar&amp;quot; command above&lt;br /&gt;
# 4. test in a non-Strawberry Perl window, such as the MSYS2 terminal, using the command:&lt;br /&gt;
#&lt;br /&gt;
#      PERL_DL_DEBUG=5 dist/nhc-explorer.exe&lt;br /&gt;
#&lt;br /&gt;
#    I learned about this command while searching, here:&lt;br /&gt;
#&lt;br /&gt;
#      https://stackoverflow.com/questions/423330/why-cant-dynaloader-pm-load-ssleay-dll-for-netssleay-and-cryptssleay&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==== Important Note About Finding all DLLs ====&lt;br /&gt;
It is worth repeating that &amp;lt;code&amp;gt;pp_autolink&amp;lt;/code&amp;gt;, provided by &amp;lt;code&amp;gt;App::PP::Autolink&amp;lt;/code&amp;gt; has proven to be absolutely &#039;&#039;critical&#039;&#039; to finding the required DLLs that need to be added manually to the &amp;lt;code&amp;gt;wxpar&amp;lt;/code&amp;gt; command below via the &amp;lt;code&amp;gt;--link&amp;lt;/code&amp;gt; flag.&lt;br /&gt;
&lt;br /&gt;
If you are having problems finding all the DLLs (some which may not be obvious until the EXE generated is tried on a different machine,) you need to give &amp;lt;code&amp;gt;pp_autolink&amp;lt;/code&amp;gt; a shot.&lt;br /&gt;
&lt;br /&gt;
=== Martha - &#039;&#039;A lightweight wxPerl helper for packaging Perl applications on Windows&#039;&#039; ===&lt;br /&gt;
In February 2026, an exciting new project was launched to help Perl programmers bootstrap creating Windows executables and program installers. Martha, formerly referred to here as wxPerl Helper, is designed to work within the development environment described herein (Strawberry Perl, Alien::wxWidgets, wxPerl, wxGlade). Given this environment, the current &amp;quot;beta&amp;quot; version of the software can assist with the following:&lt;br /&gt;
&lt;br /&gt;
* automatically finds required DLLs&lt;br /&gt;
* generates Makefile, based on using wxpar (a pp wrapper)&lt;br /&gt;
* user can tweak and save the Makefile&lt;br /&gt;
* user can load an existing Makefile&lt;br /&gt;
* user can run the Makefile to create the executable&lt;br /&gt;
* user can run the executable&lt;br /&gt;
* user can configure an Inno Setup provided it is installed&lt;br /&gt;
* run the Inno Setup file to generate an installer for their program&lt;br /&gt;
* finally, they may test the installer directly from the GUI&lt;br /&gt;
&lt;br /&gt;
Martha is targeting the gap that exists for a user that is able to generate Perl code from wxGlade, but then is unsure how to actually distribute their application in the way Windows users expect.&lt;br /&gt;
&lt;br /&gt;
For more information and updates on the project, visit the Github repo [https://github.com/The-Perl-Cottage-Guild/wxPerl-Helper here].&lt;br /&gt;
&lt;br /&gt;
=== Background: Perl, wxWidgets, and RAD on Windows ===&lt;br /&gt;
&lt;br /&gt;
For historical context on earlier Perl/wxWidgets GUI builders, RAD tools, and discontinued Windows application-building efforts, see [[Perl and wxWidgets RAD on Windows]].&lt;br /&gt;
&lt;br /&gt;
== Creating Installers for Windows EXEs ==&lt;br /&gt;
Professional Windows programs are expected to provide installers. This section will be developed as I figure out how to do this. A few notes:&lt;br /&gt;
&lt;br /&gt;
* Strawberry Perl itself uses &#039;&#039;&#039;[https://wixtoolset.org/ WiX Toolset]&#039;&#039;&#039; (Windows Installer XML Toolset) to generate its MSI installer (see [https://github.com/StrawberryPerl/Perl-Dist-Strawberry/blob/master/share/msi/MSI_main-v2.wxs.tt here])&lt;br /&gt;
* &#039;&#039;&#039;[https://nsis.sourceforge.io/Main_Page NSIS]&#039;&#039;&#039; (Nullsoft Scriptable Install System) is another option - ([https://nsis.sourceforge.io/Category:Tutorials tutorials], [https://nsis.sourceforge.io/Category:Code_Examples examples], [https://nsis.sourceforge.io/Screenshots screenshots]) - it also has its own IDE for visually designing installers! [https://nsis.sourceforge.io/NSIS_Dialog_Designer See more here].&lt;br /&gt;
* A possible &amp;quot;old school&amp;quot; approach, may be to use Office&#039;97 Office Developer Edition (ODE) - via Access&#039;97 there is an installer builder - this is a last resort and still needs to be verified to work for non-Access distributions&lt;br /&gt;
* [https://jrsoftware.org/isinfo.php Inno Setup] ([https://github.com/jrsoftware/issrc github]) - &#039;&#039;Inno Setup is a free installer for Windows programs by Jordan Russell and Martijn Laan. First introduced in 1997, Inno Setup today rivals and even surpasses many commercial installers in feature set and stability.&#039;&#039;&lt;br /&gt;
* [https://www.revenera.com/install/products/installshield InstallShield] (commercial - software monetization services)&lt;br /&gt;
&lt;br /&gt;
=== Using Inno Setup ===&lt;br /&gt;
This section briefly describes using [https://jrsoftware.org/isinfo.php Inno Setup] to build an installed for a Windows executable. It seems to be pretty easy to use and has support for many more things than most Perl programmers may actually need. One important thing to note is that it is free for non-commercial use, there is a [https://jrsoftware.org/isorder.php commercial license] required by the author for using this to distribute commercial programs. The license is one-time and entitles the end-user to 2 years of updates. After that, they may continue to use it but will not receive the updates. For all intents and purposes it is a one-time fee, and may considered worth it for some software authors.&lt;br /&gt;
&lt;br /&gt;
Using Inno Setup consists of creating a configuration file, then using the Inno Setup Compiler&#039;s GUI to open up an &amp;quot;.iss&amp;quot; file, then run it interactively. It may also be run on the command line or as part of a Makefile.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/StormSurgeLive/nhc-advisory-gui/blob/master/installer/nhc-explorer.iss Click here] to see an example configuration file used by the NHC Advisory GUI.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/The-Perl-Cottage-Guild/wxPerl-Helper Support] for creating configurations and installers with Inno Setup is also being included in [https://github.com/The-Perl-Cottage-Guild/wxPerl-Helper Martha], the wxPerl helper application being created as part of this Perl Guilds effort to make it easier for traditional Perl programmers to break into the world of commercial Windows GUI programs.&lt;br /&gt;
== Underdeveloped Sections ==&lt;br /&gt;
The following sections are &amp;quot;works in progress,&amp;quot; and remain open questions (for this author anyway). Contributions to develop these sections are greatly appreciated, but not expected. Over time I will update these sections as I learn more about using wxGlade and Perl on Windows.&lt;br /&gt;
&lt;br /&gt;
=== Distributing EXEs to other Windows Machines ===&lt;br /&gt;
While wxpar does indeed create EXEs that can run on Windows machines that do not otherwise have any required libraries on them, I have found some early problems that are most likely due to lack of experience in this area. An understanding of this area is forthcoming.&lt;br /&gt;
&lt;br /&gt;
=== Maintaining Perl Applications using XRC ===&lt;br /&gt;
[https://docs.wxwidgets.org/latest/overview_xrc.html XRC] is a language agnostic and XML based way of describing the GUI layout for wxWidgets. It appears to be the right way to maintain the GUI layout of your production grade program, while maintaining the set of Perl handlers in your own source tree. Think of XRC as the separation of the controller and view in MVC - it to GUI programming what templates are to web application programming. It seems that as one advances his skills in this area, he will want to use XRC. The benefit also of this is that one may be able to create controllers in multiple languages rather than tie the GUI construction in Perl or some other language exclusive - of course, wxGlade can output in different languages, but none is as abstract as XRC.&lt;br /&gt;
[[File:Xrc.png|alt=Wx::Demo example of loading an XRC file; wxGlade can output directly to XRC, which can then be read in Perl. This is how.|thumb|Wx::Demo example of loading an XRC file; wxGlade can output directly to XRC, which can then be read in Perl. [https://metacpan.org/release/MDOOTSON/Wx-Demo-0.22/source/lib/Wx/DemoModules/wxXrc.pm This] is how.]]&lt;br /&gt;
Wx::Demo has a few [https://metacpan.org/release/MDOOTSON/Wx-Demo-0.22/source/lib/Wx/DemoModules/wxXrc.pm good examples] of running XRC applications; wxGlade can output XRC, but it is not aware of any language bindings or drivers for it.&lt;br /&gt;
&lt;br /&gt;
Experience with managing XRC files may allow us as Perl programmers to use RAD tools and GUI builders that were not intended to support wxPerl, but can output XRC files. [http://www.anthemion.co.uk/dialogblocks/download.htm DialogBlocks] is such a professional and commercial GUI builder for wxWidgets, and it is actively maintained.&lt;br /&gt;
&lt;br /&gt;
=== Frequently Asked Questions ===&lt;br /&gt;
Nobody actually contacts me to ask these questions, but they seem to be important.&lt;br /&gt;
&lt;br /&gt;
==== Q: Can these wxPerl applications using Strawberry Perl make &#039;&#039;https&#039;&#039; requests? ====&lt;br /&gt;
A: Yes! Strawberry Perl comes with HTTP::Tiny (a core Perl module) and Net::SSLeay (used by HTTP::Tiny for https requests).&lt;br /&gt;
&lt;br /&gt;
== Additional Resources ==&lt;br /&gt;
&lt;br /&gt;
=== Printed Books ===&lt;br /&gt;
[[File:Wxbook.jpg|alt=This great, but out of print wxWidgets book is available for free (PDF) at https://wxwidgets.org/docs/book/. It mentions wxPerl and has an index of tools and programs that any wxWidgets programmer may find interest.|thumb|This great, but out of print wxWidgets book is available for free (PDF) at https://wxwidgets.org/docs/book/. It mentions wxPerl and has an index of tools and programs that any wxWidgets programmer may find interest.]]&lt;br /&gt;
&#039;&#039;&#039;Cross-Platform GUI Programming with wxWidgets&#039;&#039;&#039; ([https://wxwidgets.org/docs/book/ free PDF!!]) by Julian Smart and Kevin Hock (with Stefan Csomor) is an old, but nice resource to have. It mentions wxPerl quite a bit and has a nice index of tools to help the wxWidgets GUI programmer, regardless of the language they are using. In particular, &amp;quot;Appendix E: Third-Party Tools for wxWidgets&amp;quot; is a very interesting read.&lt;br /&gt;
&lt;br /&gt;
=== Longer List of RAD Tools and GUI Builders* ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [[Developing and Distributing wxPerl Applications on Windows#wxGlade - a Perl Friendly Cross-Platform GUI Builder|wxGlade]] (&#039;&#039;Latest at this time&#039;&#039;, &#039;&#039;&#039;Version 1.1.0, July 7, 2024&#039;&#039;&#039;)&lt;br /&gt;
* [https://web.archive.org/web/20131020024033/http://www.wxdesigner-software.de/download.html wxDesigner] (&#039;&#039;Latest at this time&#039;&#039;, &#039;&#039;&#039;2.14 - wxWidgets 2.8.8/ 2.20a - wxWidgets pre-3.0, May 2009&#039;&#039;&#039;)&lt;br /&gt;
** outputs Perl code&lt;br /&gt;
** archived but a trial is downloadable [https://web.archive.org/web/20131020024033/http://www.wxdesigner-software.de/download.html here] (archive.org)&lt;br /&gt;
** Reliable contact for license: &#039;&#039;undetermined at this time&#039;&#039;&lt;br /&gt;
* [http://www.anthemion.co.uk/dialogblocks/download.htm DialogBlocks] -  &#039;&#039;&#039;(&#039;&#039;&#039;&#039;&#039;Latest at this time&#039;&#039;, &#039;&#039;&#039;Version 5.18, August 21st, 2024)&#039;&#039;&#039;&lt;br /&gt;
** can export C++, XRC, which wxGlade should be able to import&lt;br /&gt;
** No Perl export (see XRC)&lt;br /&gt;
** Cross Platform (Windows, Mac, Linux)&lt;br /&gt;
** Registration required, but support is discontinued - email support@anthemion.co.uk, they may just give you a free key if you are nice :-)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;*You may want to also check this duplicated internal [[Portal:Software Development Tools#wxPerl (wxWidgets wrapper)|page]].&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=Developing_and_Distributing_wxPerl_Applications_on_Windows&amp;diff=341</id>
		<title>Developing and Distributing wxPerl Applications on Windows</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=Developing_and_Distributing_wxPerl_Applications_on_Windows&amp;diff=341"/>
		<updated>2026-07-05T07:16:10Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* wxGlade - a Perl Friendly Cross-Platform GUI Builder */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
This article is part of the Perl Lazarus Project, an effort to make Windows GUI development in Perl practical again by identifying a working toolchain for creating, packaging, and distributing desktop applications.&lt;br /&gt;
&lt;br /&gt;
The name is a nod both to Lazarus of the Bible and to the excellent Lazarus IDE for Free Pascal. Perl does not currently have a direct equivalent to that kind of unified rapid application development environment, so this project focuses on documenting a practical path using the tools that are available today.&lt;br /&gt;
&lt;br /&gt;
This page is about installing wxPerl under Strawberry Perl for application development and distribution as a Windows executable.&lt;br /&gt;
&lt;br /&gt;
=== Why Perl GUIs, why Windows? ===&lt;br /&gt;
This is a critical ability for any freelance Perl developer, since it complements a Perl journeyman&#039;s ability to do many things on servers, such as create remote services. Being able to transfer these skills to the desktop environment is especially useful on Windows, where users are accustomed to paying for software. In short, Perl programmers who want to make a living on their own need to know how to create and distribute Windows GUI applications; this page covers a large piece of how to do that.&lt;br /&gt;
[[File:FreeAPIGUI.png|alt=wxPerl GUI running on Windows as a double-clickable EXE file!|thumb|wxPerl GUI running on Windows as a double-clickable EXE file! Created using wxGlade, a RAD-ish tool. See [https://github.com/oodler577/FreeAPI-Perl-API-Explorer more images] on Github.]]&lt;br /&gt;
Instructions are provided with the versions detailed below. If there are newer versions of any of the modules, you may try them out (of course); but understand they have not been tried and shown to work like the version combinations below.&lt;br /&gt;
&lt;br /&gt;
=== [https://dev.to/sciurius/wxperl-revival-5fde See] the original call for a [https://dev.to/sciurius/wxperl-revival-5fde wxPerl Revival]! ===&lt;br /&gt;
&lt;br /&gt;
=== Git Repository of wxGlade / wxPerl Examples ===&lt;br /&gt;
https://github.com/The-Perl-Cottage-Guild/wxPerl-Templates&lt;br /&gt;
== Installing wxPerl on Windows for Development ==&lt;br /&gt;
&lt;br /&gt;
These instructions are for you, not your customers! Give them a clickable installer like Windows users expect (see how here!)&lt;br /&gt;
&lt;br /&gt;
=== General Steps ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Step&lt;br /&gt;
! Component&lt;br /&gt;
! Link&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Strawberry Perl&lt;br /&gt;
| [https://strawberryperl.com/releases.html releases]&lt;br /&gt;
| Install Strawberry Perl first. For the newer PDL-based build, use the PDL ZIP edition rather than the standard MSI.&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Alien::wxWidgets&lt;br /&gt;
| [https://github.com/sciurius/perl-Alien-wxWidgets/releases/ github]&lt;br /&gt;
| Install after Strawberry Perl and wxWidgets are available.&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Wx / wxPerl&lt;br /&gt;
| [https://github.com/sciurius/wxPerl/releases github]&lt;br /&gt;
| Install last; this is the Perl binding used by wxPerl applications.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== More Specific Version Combinations with Detailed Instructions &amp;amp; Links ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Status&lt;br /&gt;
! Strawberry Perl&lt;br /&gt;
! wxWidgets&lt;br /&gt;
! Alien::wxWidgets&lt;br /&gt;
! Wx / wxPerl&lt;br /&gt;
! Detailed Instructions / Links&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Latest / Experimental PDL Build&lt;br /&gt;
| [https://github.com/StrawberryPerl/Perl-Dist-Strawberry/releases/tag/SP_54221_64bit 5.42.2.1 64-bit UCRT, PDL ZIP edition]&lt;br /&gt;
| [https://github.com/wxWidgets/wxWidgets/releases/tag/v3.2.9 3.2.9]&lt;br /&gt;
| [https://github.com/sciurius/perl-Alien-wxWidgets/releases/tag/R0.73 0.73]&lt;br /&gt;
| [https://github.com/sciurius/wxPerl/releases/tag/R3.009 3.009]&lt;br /&gt;
| [[Wx 3.009, Alien::wxWidgets 0.73, Strawberry Perl 5.42.2.1 PDL]]&lt;br /&gt;
| Newer PDL-based build path. The PDL ZIP conventionally unpacks under &amp;lt;code&amp;gt;C:\sw\pdl&amp;lt;/code&amp;gt;. Add &amp;lt;code&amp;gt;C:\sw\pdl\c\bin&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;C:\sw\pdl\perl\site\bin&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;C:\sw\pdl\perl\bin&amp;lt;/code&amp;gt; to the active &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt;. This combination should be treated as experimental until the full build and packaging workflow is verified.&lt;br /&gt;
|-&lt;br /&gt;
| Upstream PowerShell Helper Script&lt;br /&gt;
| [https://github.com/StrawberryPerl/Perl-Dist-Strawberry/releases/tag/SP_54201_64bit 5.42.0.1 64-bit portable, by default]&lt;br /&gt;
| [https://github.com/wxWidgets/wxWidgets/releases/tag/v3.2.9 3.2.9]&lt;br /&gt;
| [https://github.com/sciurius/perl-Alien-wxWidgets/releases/tag/R0.73 0.73]&lt;br /&gt;
| [https://github.com/sciurius/wxPerl/releases/tag/R3.009 3.009]&lt;br /&gt;
| [https://github.com/sciurius/wxGitHubAction/blob/main/script/wxPerl-Windows.ps1 wxPerl-Windows.ps1]&lt;br /&gt;
| Read the script carefully before running it. As written, it installs portable Strawberry Perl, builds wxWidgets from source, manually installs Alien::wxWidgets configuration, then builds Wx. It does not use the PDL ZIP by default, so the script needs adjustment for the &amp;lt;code&amp;gt;C:\sw\pdl&amp;lt;/code&amp;gt; PDL layout. It is best treated as an upstream build recipe or advanced helper, not as the primary beginner installation path.&lt;br /&gt;
|-&lt;br /&gt;
| Previously Tested&lt;br /&gt;
| [https://github.com/StrawberryPerl/Perl-Dist-Strawberry/releases/tag/SP_54021_64bit_UCRT 5.40.2.1 64-bit UCRT MSI]&lt;br /&gt;
| See detailed instructions page&lt;br /&gt;
| [https://github.com/sciurius/perl-Alien-wxWidgets/releases/tag/R0.71 0.71]&lt;br /&gt;
| [https://github.com/sciurius/wxPerl/releases/tag/R3.008 3.008]&lt;br /&gt;
| [[Wx 3.008, Alien::wxWidgets 0.71, Strawberry Perl 5.40.2.1]]&lt;br /&gt;
| Previously documented working combination. This is the safer reference path until the newer PDL build is fully verified.&lt;br /&gt;
|-&lt;br /&gt;
| Archive&lt;br /&gt;
| [https://github.com/StrawberryPerl/Perl-Dist-Strawberry/releases/tag/SP_54001_64bit_UCRT 5.40.0.1 64-bit UCRT MSI]&lt;br /&gt;
| See detailed instructions page&lt;br /&gt;
| [https://github.com/sciurius/perl-Alien-wxWidgets/releases/tag/R0.70 0.70]&lt;br /&gt;
| [https://github.com/sciurius/wxPerl/releases/tag/R3.005 3.005]&lt;br /&gt;
| [[Wx 3.005, Alien::wxWidgets 0.70, Strawberry Perl 5.40.0.1]]&lt;br /&gt;
| Earlier archived working combination. Keep this entry for historical reference and troubleshooting regressions.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Verify Installation ==&lt;br /&gt;
The information provided in this section ought to be unrelated to the verified version combination outlined in the Installation section above. &lt;br /&gt;
&lt;br /&gt;
=== Install Wx::Demo ===&lt;br /&gt;
Wx::Demo is nice demonstration application, highlight many (if not all) of the wxWidget features available via xPerl.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;C:\&amp;gt; cpanm --verbose Wx::Demo&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
.. then once installed, run it with this command (which is available in the PATH already),&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;C:\&amp;gt; wxperl_demo.pl&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== wxGlade - a Perl Friendly Cross-Platform GUI Builder ==&lt;br /&gt;
&lt;br /&gt;
=== Trigger Warning: wxGlade is written in wxPython, so you must install it if you want to use wxGlade to build your GUI. ===&lt;br /&gt;
Totally worth it!&lt;br /&gt;
&lt;br /&gt;
=== Install wxGlade ===&lt;br /&gt;
[https://sourceforge.net/projects/wxglade/ wxGlade] is a GUI builder for wxWidgets applications. It is written in Python, but critically supports outputting Perl code. It is actively developed, and the developer is very responsive on Github to bugs and feature requests. It is the closest thing we have in Perl to a rapid application development environment, in the spirit of [https://www.lazarus-ide.org/ Lazarus] for Free Pascal.&lt;br /&gt;
&lt;br /&gt;
Developers interested in earlier wxWidgets GUI builders and older Perl-capable tools can also see the [[Developing and Distributing wxPerl Applications on Windows#Longer List of RAD Tools and GUI Builders|longer list of RAD tools and GUI builders]] near the end of this page, including some useful but discontinued, archived, or historically important projects.&lt;br /&gt;
=== Step 1 - Install Python 3.10.11 for Windows ===&lt;br /&gt;
Install via following link,&lt;br /&gt;
&lt;br /&gt;
https://www.python.org/ftp/python/3.10.11/python-3.10.11-amd64.exe ([https://www.python.org/downloads/windows/ linked here])&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
# Last tested on &#039;&#039;&#039;25 Jan 2025&#039;&#039;&#039;, although later versions of Python 3 were tested (specifically, 3.12.8), wxPython would install but not run wxGlade properly&lt;br /&gt;
# install as admin (checkbox should be already checked; also opt&#039;d to add &amp;quot;python&amp;quot; to the PATH)&lt;br /&gt;
&lt;br /&gt;
=== Step 2 - Install wxPython ===&lt;br /&gt;
&lt;br /&gt;
# open up the Windows CMD window&lt;br /&gt;
# use pip,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;C:\&amp;gt; pip install wxPython&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: if this fails, you may need to reinstall pip; but it should be available in the CMD window. Based on experience, pip doesn&#039;t seem to be available via the Strawberry Perl terminal, so be sure to get a standard Windows CMD window to do this part.&lt;br /&gt;
&lt;br /&gt;
=== Step 3 - Download and unzip wxGlade ===&lt;br /&gt;
You should probably check if there is a [https://github.com/wxGlade/wxGlade/releases &#039;&#039;&#039;new release&#039;&#039;&#039;], but to get the latest at the time of this update, download: https://github.com/wxGlade/wxGlade/archive/refs/tags/v1.1.1.zip (may want to also try [https://downloads.sourceforge.net/project/wxglade/wxglade/1.1.0/wxGlade-1.1.0_win_amd64.zip?ts=gAAAAABnlJMXBQlBk2CGz7kaN89RrjqS4GEmSk7spuPtf-gFaK_VqcAQAiFCT24GT-SYsq8SVVmCjmhkzq0VycLd7ofhOQoVlA%3D%3D&amp;amp;r=https%3A%2F%2Fsourceforge.net%2Fprojects%2Fwxglade%2Ffiles%2Fwxglade%2F1.1.0%2FwxGlade-1.1.0_win_amd64.zip%2Fdownload%3Fuse_mirror%3Dphoenixnap%26use_mirror%3Dphoenixnap%26r%3Dhttps%253A%252F%252Fsourceforge.net%252Fprojects%252Fwxglade%252Ffiles%252Fwxglade%252F1.1.0%252F wxGlade-1.1.0_win_amd64.zip] - the difference between the two is unclear, but both are tested and both work.)&lt;br /&gt;
[[File:WxgladeWinExample.png|alt=wxGlade running on Windows, showing the design window of a GUI about to be run using wxPerl!|thumb|wxGlade running on Windows, showing the design window of a GUI about to be run using wxPerl!]]&lt;br /&gt;
Via Windows CMD terminal, navigate to the unzipped directory and run the command,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;C:\&amp;gt; python wxglade.py&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Getting wxGlade Help ===&lt;br /&gt;
&#039;&#039;wxGlade&#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;s developer is responsive on Github and there is a semi-active email list on SourceForge,&lt;br /&gt;
&lt;br /&gt;
* Github repo - https://github.com/wxGlade/wxGlade&lt;br /&gt;
* email list - https://sourceforge.net/p/wxglade/mailman/wxglade-general/&lt;br /&gt;
* See [GUI ideas for use with wxGlade] if you don&#039;t know where to start!&lt;br /&gt;
&lt;br /&gt;
== Development Workflow Notes ==&lt;br /&gt;
This section outlines some different workflows that are found among members of the community who use wxPerl. Like any workflow, the based on level of experience and particular application.&lt;br /&gt;
[[File:Wxperl-workflow.png|alt=Example layout with Strawberry Perl for running the application and Makefile, vim under MSYS2 for more streamlined workflow. wxGlade is under there, too; when there is a change to the GUI, the project is saved and code generated using &amp;quot;ctrl-g&amp;quot;. vim is used to edit the code and will update whenever wxGlade updates it, if you do it right your custom code won&#039;t get clobbered.|thumb|Example layout with Strawberry Perl for running the application and Makefile, vim under MSYS2 for more streamlined workflow. wxGlade is under there, too; when there is a change to the GUI, the project is saved and code generated using &amp;quot;ctrl-g&amp;quot;. vim is used to edit the code and will update whenever wxGlade updates it, if you do it right your custom code won&#039;t get clobbered.]]&lt;br /&gt;
&lt;br /&gt;
=== Editor and &amp;lt;code&amp;gt;git&amp;lt;/code&amp;gt; Options on Windows ===&lt;br /&gt;
The best way to recreate the &amp;quot;edit-run-fix&amp;quot; workflow of code editing enjoyed by vim users is to install [https://www.msys2.org/ MSYS2] and use its terminal to install both &amp;lt;code&amp;gt;vim&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;git&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;pacman -S vim git&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: you do not want to run the Perl code generated by wxGlade inside of the MSYS2 terminal. When you install &amp;lt;code&amp;gt;git&amp;lt;/code&amp;gt;, it will install its own perl and clobber Strawberry Perl in your &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt;. Run the Perl code for your project from a Strawberry Perl terminal.&lt;br /&gt;
&lt;br /&gt;
Just like the editor options in Windows is not ideal, neither are the Git options (GH&#039;s &amp;quot;Git for Windows&amp;quot; is exceptionally awkward to use, not sure how to it is possible to be good in &amp;quot;Windows&amp;quot; tbh; YMMV.) Under MSYS2&#039;s terminal,  you may install &amp;lt;code&amp;gt;git&amp;lt;/code&amp;gt; and use it as you may be accustomed on Linux. You may want to generate an ssh-key, which will be vailable in `~/.ssh/` by default. So you can do all the normal git workflow stuff from there once your key is created and added to your Github keyset.&lt;br /&gt;
&lt;br /&gt;
==== Pro Tip: Turn Off MSYS2&#039;s &amp;lt;code&amp;gt;vim&amp;lt;/code&amp;gt; Mouse Support and Auto/Smart Indenting ====&lt;br /&gt;
I have found that this is required to &amp;quot;copy&amp;quot; text from the MSYS2 &amp;lt;code&amp;gt;vim&amp;lt;/code&amp;gt;, you may not need it. But by default &amp;lt;code&amp;gt;vim&amp;lt;/code&amp;gt; is aware of the mouse.&lt;br /&gt;
&lt;br /&gt;
To turn all that off, put the following lines in your &amp;lt;code&amp;gt;~/.vimrc&amp;lt;/code&amp;gt; file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set mouse=&lt;br /&gt;
set noautoindent&lt;br /&gt;
set nosmartindent&lt;br /&gt;
set nocindent&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Using wxGlade&#039;s &amp;quot;Single file&amp;quot; + &amp;quot;&#039;&#039;Keep user code&#039;&#039;&amp;quot; Options ===&lt;br /&gt;
wxGlade has some settings that tells it to not overwrite changes you made in the output Perl script, but &#039;&#039;&#039;beware&#039;&#039;&#039; - this option is not on by default. That means that means that your file will get overwritten if you tell wxGlade to generate new code again. The general workflow is as follows:&lt;br /&gt;
&lt;br /&gt;
# start a new project (or open an existing one)&lt;br /&gt;
# click on the root &amp;quot;Application&amp;quot; object in the object viewer&lt;br /&gt;
# find the output pane, set the output to be &amp;quot;&#039;&#039;&#039;Perl&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
# set version of wxWidgets to be &amp;quot;&#039;&#039;&#039;3.0&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
# [[File:Applicationsettings.png|alt=Recommended settings for using wxGlade for Perl development.|thumb|Recommended settings for using wxGlade for Perl development.]]check &amp;quot;Keep user code&amp;quot;, this will make sure wxGlade doesn&#039;t overwrite code that is outside the bounds of very clearly marked blocks in the code&lt;br /&gt;
&lt;br /&gt;
=== Using wxGlade&#039;s &amp;quot;&#039;&#039;Separate file for each class&#039;&#039;&amp;quot; Option ===&lt;br /&gt;
... to do&lt;br /&gt;
&lt;br /&gt;
== Creating Windows EXEs ==&lt;br /&gt;
This section is more of a work in progress since a reliable method of distributing single file executables (or developing installation packages for Windows) is still an open question, there is hope that this will end up being a relatively smooth process. Needless to say, it is critical for Perl developer to be able to distribute Perl based GUI applications as single file (.exe) or via installation on Windows. The client should NOT need to be running through any of the instructions above to run a program that you would like to sell them for actual money.&lt;br /&gt;
&lt;br /&gt;
Below are the initial instructions for generating an EXE file. There are also many ways that wxPerl developers go about doing, based on their use case and experience.&lt;br /&gt;
&lt;br /&gt;
=== PAR::Package, App::PP::Autolink, and Wx::Perl::Packager ===&lt;br /&gt;
&lt;br /&gt;
==== Step 1 - Install PAR::Package, App::PP::Autolink, and Wx::Perl::Packager ====&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;C:\&amp;gt; cpanm --verbose PAR::Package App::PP::Autolink Wx::Perl::Packager&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: &amp;lt;code&amp;gt;pp_autolink&amp;lt;/code&amp;gt;, provided by &amp;lt;code&amp;gt;App::PP::Autolink&amp;lt;/code&amp;gt;, has proven to be absolutely critical to finding the required DLLs that need to be added manually to the &amp;lt;code&amp;gt;wxpar&amp;lt;/code&amp;gt; command below via the &amp;lt;code&amp;gt;--link&amp;lt;/code&amp;gt; flag.&lt;br /&gt;
&lt;br /&gt;
==== Step 2 - Generate the EXE ====&lt;br /&gt;
Assuming you have a Perl script generated either via wxGlade (see above) or one you have created/updated by hand, the command is as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;C:\&amp;gt; wxpar YOURPROGRAM.pl -o YOURPROGRAM.exe&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Important Notes About wxGlade Generated Code =====&lt;br /&gt;
# Earlier versions of wxGlade introduced an improper idiom at the bottom of the generated Perl script that caused a problem when running via a PAR::Packed executable. TLDR: remove the &amp;quot;unless(caller)&amp;quot; block and just run the Wx event loop unfettered. For more information, please read the [https://metacpan.org/dist/PAR/view/lib/PAR/FAQ.pod#If-I-try-to-compile-my-wxGlade-generated-script%2C-it-doesn%27t-run.-What%27s-wrong%3F PAR::FAQ.]&lt;br /&gt;
# Earlier versions of wxGlade also used a non-Exporter import tag that wxpar could not properly follow; see the code &amp;quot;before&amp;quot; and &amp;quot;after&amp;quot; below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
use Wx qw[:allclasses];&lt;br /&gt;
use strict;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
package main;&lt;br /&gt;
&lt;br /&gt;
unless(caller){&lt;br /&gt;
    my $local = Wx::Locale-&amp;gt;new(&amp;quot;English&amp;quot;, &amp;quot;en&amp;quot;, &amp;quot;en&amp;quot;); # replace with ??&lt;br /&gt;
    $local-&amp;gt;AddCatalog(&amp;quot;app&amp;quot;); # replace with the appropriate catalog name&lt;br /&gt;
&lt;br /&gt;
    my $app = MyApp-&amp;gt;new();&lt;br /&gt;
    $app-&amp;gt;MainLoop();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Should be modified to look like the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
use Wx;&lt;br /&gt;
use strict;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
package main;&lt;br /&gt;
&lt;br /&gt;
my $local = Wx::Locale-&amp;gt;new(&amp;quot;English&amp;quot;, &amp;quot;en&amp;quot;, &amp;quot;en&amp;quot;); # replace with ??&lt;br /&gt;
$local-&amp;gt;AddCatalog(&amp;quot;app&amp;quot;); # replace with the appropriate catalog name&lt;br /&gt;
&lt;br /&gt;
my $app = MyApp-&amp;gt;new();&lt;br /&gt;
$app-&amp;gt;MainLoop();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See [https://github.com/wxGlade/wxGlade/issues/568 this Github issue] for wxGlade, where both were fixed. At the time of this writing, the changes have not been put out in an official release; but they are applied in the master branch.&lt;br /&gt;
&lt;br /&gt;
==== Special Cases ====&lt;br /&gt;
&lt;br /&gt;
===== &amp;lt;code&amp;gt;Makefile&amp;lt;/code&amp;gt; for an Application uses HTTP::Tiny and calls out to SSL-enabled sites =====&lt;br /&gt;
Example - [https://github.com/StormSurgeLive/nhc-advisory-gui/blob/master/asgs-storm-bug.pl https://github.com/StormSurgeLive/nhc-advisory-gui/]&lt;br /&gt;
&lt;br /&gt;
(copied from the [https://github.com/StormSurgeLive/nhc-advisory-gui/blob/master/Makefile Makefile]) - Note, mentions using [https://metacpan.org/pod/App::PP::Autolink App::PP::Autolink] to suss out required DLLs (provides &amp;lt;code&amp;gt;pp_autolink&amp;lt;/code&amp;gt;, which helped!)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
all:&lt;br /&gt;
        wxpar --verbose -o ./dist/nhc-explorer.exe -l c:/strawberry/c/bin/libcrypto-3-x64__.dll -l c:/strawberry/c/bin/zlib1__.dll -l c:/strawberry/c/bin/libssl-3-x64__.dll ./asgs-storm-bug.pl --gui&lt;br /&gt;
        wxpar --verbose -o ./dist/DEBUG-nhc-explorer.exe -l c:/strawberry/c/bin/libcrypto-3-x64__.dll -l c:/strawberry/c/bin/zlib1__.dll -l c:/strawberry/c/bin/libssl-3-x64__.dll ./asgs-storm-bug.pl&lt;br /&gt;
&lt;br /&gt;
# It was an adventure finding all the dependencies related to the wxpar command,&lt;br /&gt;
# particularly those around what was needed. The basic process entailed:&lt;br /&gt;
# 1. use wxpar, which generates an options file with all the Wx DLLs&lt;br /&gt;
# 2. install App::PP::Autolink, which provides the utility &amp;quot;pp_autolink&amp;quot;; this&lt;br /&gt;
#    utility scans the .pl file you&#039;re packing, in this case, &amp;quot;asgs-storm-bug.pl&amp;quot;,&lt;br /&gt;
#    for DLLs - lo&#039; and behold, it found the ones I needed; in particular the critical&lt;br /&gt;
#    one that was not getting picked up by pp or wxpar, &amp;quot;libcrypto-3-x64___.dll!&amp;quot;&lt;br /&gt;
# 3. run the &amp;quot;wxpar&amp;quot; command above&lt;br /&gt;
# 4. test in a non-Strawberry Perl window, such as the MSYS2 terminal, using the command:&lt;br /&gt;
#&lt;br /&gt;
#      PERL_DL_DEBUG=5 dist/nhc-explorer.exe&lt;br /&gt;
#&lt;br /&gt;
#    I learned about this command while searching, here:&lt;br /&gt;
#&lt;br /&gt;
#      https://stackoverflow.com/questions/423330/why-cant-dynaloader-pm-load-ssleay-dll-for-netssleay-and-cryptssleay&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==== Important Note About Finding all DLLs ====&lt;br /&gt;
It is worth repeating that &amp;lt;code&amp;gt;pp_autolink&amp;lt;/code&amp;gt;, provided by &amp;lt;code&amp;gt;App::PP::Autolink&amp;lt;/code&amp;gt; has proven to be absolutely &#039;&#039;critical&#039;&#039; to finding the required DLLs that need to be added manually to the &amp;lt;code&amp;gt;wxpar&amp;lt;/code&amp;gt; command below via the &amp;lt;code&amp;gt;--link&amp;lt;/code&amp;gt; flag.&lt;br /&gt;
&lt;br /&gt;
If you are having problems finding all the DLLs (some which may not be obvious until the EXE generated is tried on a different machine,) you need to give &amp;lt;code&amp;gt;pp_autolink&amp;lt;/code&amp;gt; a shot.&lt;br /&gt;
&lt;br /&gt;
=== Martha - &#039;&#039;A lightweight wxPerl helper for packaging Perl applications on Windows&#039;&#039; ===&lt;br /&gt;
In February 2026, an exciting new project was launched to help Perl programmers bootstrap creating Windows executables and program installers. Martha, formerly referred to here as wxPerl Helper, is designed to work within the development environment described herein (Strawberry Perl, Alien::wxWidgets, wxPerl, wxGlade). Given this environment, the current &amp;quot;beta&amp;quot; version of the software can assist with the following:&lt;br /&gt;
&lt;br /&gt;
* automatically finds required DLLs&lt;br /&gt;
* generates Makefile, based on using wxpar (a pp wrapper)&lt;br /&gt;
* user can tweak and save the Makefile&lt;br /&gt;
* user can load an existing Makefile&lt;br /&gt;
* user can run the Makefile to create the executable&lt;br /&gt;
* user can run the executable&lt;br /&gt;
* user can configure an Inno Setup provided it is installed&lt;br /&gt;
* run the Inno Setup file to generate an installer for their program&lt;br /&gt;
* finally, they may test the installer directly from the GUI&lt;br /&gt;
&lt;br /&gt;
Martha is targeting the gap that exists for a user that is able to generate Perl code from wxGlade, but then is unsure how to actually distribute their application in the way Windows users expect.&lt;br /&gt;
&lt;br /&gt;
For more information and updates on the project, visit the Github repo [https://github.com/The-Perl-Cottage-Guild/wxPerl-Helper here].&lt;br /&gt;
&lt;br /&gt;
=== Background: Perl, wxWidgets, and RAD on Windows ===&lt;br /&gt;
&lt;br /&gt;
For historical context on earlier Perl/wxWidgets GUI builders, RAD tools, and discontinued Windows application-building efforts, see [[Perl and wxWidgets RAD on Windows]].&lt;br /&gt;
&lt;br /&gt;
== Creating Installers for Windows EXEs ==&lt;br /&gt;
Professional Windows programs are expected to provide installers. This section will be developed as I figure out how to do this. A few notes:&lt;br /&gt;
&lt;br /&gt;
* Strawberry Perl itself uses &#039;&#039;&#039;[https://wixtoolset.org/ WiX Toolset]&#039;&#039;&#039; (Windows Installer XML Toolset) to generate its MSI installer (see [https://github.com/StrawberryPerl/Perl-Dist-Strawberry/blob/master/share/msi/MSI_main-v2.wxs.tt here])&lt;br /&gt;
* &#039;&#039;&#039;[https://nsis.sourceforge.io/Main_Page NSIS]&#039;&#039;&#039; (Nullsoft Scriptable Install System) is another option - ([https://nsis.sourceforge.io/Category:Tutorials tutorials], [https://nsis.sourceforge.io/Category:Code_Examples examples], [https://nsis.sourceforge.io/Screenshots screenshots]) - it also has its own IDE for visually designing installers! [https://nsis.sourceforge.io/NSIS_Dialog_Designer See more here].&lt;br /&gt;
* A possible &amp;quot;old school&amp;quot; approach, may be to use Office&#039;97 Office Developer Edition (ODE) - via Access&#039;97 there is an installer builder - this is a last resort and still needs to be verified to work for non-Access distributions&lt;br /&gt;
* [https://jrsoftware.org/isinfo.php Inno Setup] ([https://github.com/jrsoftware/issrc github]) - &#039;&#039;Inno Setup is a free installer for Windows programs by Jordan Russell and Martijn Laan. First introduced in 1997, Inno Setup today rivals and even surpasses many commercial installers in feature set and stability.&#039;&#039;&lt;br /&gt;
* [https://www.revenera.com/install/products/installshield InstallShield] (commercial - software monetization services)&lt;br /&gt;
&lt;br /&gt;
=== Using Inno Setup ===&lt;br /&gt;
This section briefly describes using [https://jrsoftware.org/isinfo.php Inno Setup] to build an installed for a Windows executable. It seems to be pretty easy to use and has support for many more things than most Perl programmers may actually need. One important thing to note is that it is free for non-commercial use, there is a [https://jrsoftware.org/isorder.php commercial license] required by the author for using this to distribute commercial programs. The license is one-time and entitles the end-user to 2 years of updates. After that, they may continue to use it but will not receive the updates. For all intents and purposes it is a one-time fee, and may considered worth it for some software authors.&lt;br /&gt;
&lt;br /&gt;
Using Inno Setup consists of creating a configuration file, then using the Inno Setup Compiler&#039;s GUI to open up an &amp;quot;.iss&amp;quot; file, then run it interactively. It may also be run on the command line or as part of a Makefile.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/StormSurgeLive/nhc-advisory-gui/blob/master/installer/nhc-explorer.iss Click here] to see an example configuration file used by the NHC Advisory GUI.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/The-Perl-Cottage-Guild/wxPerl-Helper Support] for creating configurations and installers with Inno Setup is also being included in [https://github.com/The-Perl-Cottage-Guild/wxPerl-Helper Martha], the wxPerl helper application being created as part of this Perl Guilds effort to make it easier for traditional Perl programmers to break into the world of commercial Windows GUI programs.&lt;br /&gt;
== Underdeveloped Sections ==&lt;br /&gt;
The following sections are &amp;quot;works in progress,&amp;quot; and remain open questions (for this author anyway). Contributions to develop these sections are greatly appreciated, but not expected. Over time I will update these sections as I learn more about using wxGlade and Perl on Windows.&lt;br /&gt;
&lt;br /&gt;
=== Distributing EXEs to other Windows Machines ===&lt;br /&gt;
While wxpar does indeed create EXEs that can run on Windows machines that do not otherwise have any required libraries on them, I have found some early problems that are most likely due to lack of experience in this area. An understanding of this area is forthcoming.&lt;br /&gt;
&lt;br /&gt;
=== Maintaining Perl Applications using XRC ===&lt;br /&gt;
[https://docs.wxwidgets.org/latest/overview_xrc.html XRC] is a language agnostic and XML based way of describing the GUI layout for wxWidgets. It appears to be the right way to maintain the GUI layout of your production grade program, while maintaining the set of Perl handlers in your own source tree. Think of XRC as the separation of the controller and view in MVC - it to GUI programming what templates are to web application programming. It seems that as one advances his skills in this area, he will want to use XRC. The benefit also of this is that one may be able to create controllers in multiple languages rather than tie the GUI construction in Perl or some other language exclusive - of course, wxGlade can output in different languages, but none is as abstract as XRC.&lt;br /&gt;
[[File:Xrc.png|alt=Wx::Demo example of loading an XRC file; wxGlade can output directly to XRC, which can then be read in Perl. This is how.|thumb|Wx::Demo example of loading an XRC file; wxGlade can output directly to XRC, which can then be read in Perl. [https://metacpan.org/release/MDOOTSON/Wx-Demo-0.22/source/lib/Wx/DemoModules/wxXrc.pm This] is how.]]&lt;br /&gt;
Wx::Demo has a few [https://metacpan.org/release/MDOOTSON/Wx-Demo-0.22/source/lib/Wx/DemoModules/wxXrc.pm good examples] of running XRC applications; wxGlade can output XRC, but it is not aware of any language bindings or drivers for it.&lt;br /&gt;
&lt;br /&gt;
Experience with managing XRC files may allow us as Perl programmers to use RAD tools and GUI builders that were not intended to support wxPerl, but can output XRC files. [http://www.anthemion.co.uk/dialogblocks/download.htm DialogBlocks] is such a professional and commercial GUI builder for wxWidgets, and it is actively maintained.&lt;br /&gt;
&lt;br /&gt;
=== Frequently Asked Questions ===&lt;br /&gt;
Nobody actually contacts me to ask these questions, but they seem to be important.&lt;br /&gt;
&lt;br /&gt;
==== Q: Can these wxPerl applications using Strawberry Perl make &#039;&#039;https&#039;&#039; requests? ====&lt;br /&gt;
A: Yes! Strawberry Perl comes with HTTP::Tiny (a core Perl module) and Net::SSLeay (used by HTTP::Tiny for https requests).&lt;br /&gt;
&lt;br /&gt;
== Additional Resources ==&lt;br /&gt;
&lt;br /&gt;
=== Printed Books ===&lt;br /&gt;
[[File:Wxbook.jpg|alt=This great, but out of print wxWidgets book is available for free (PDF) at https://wxwidgets.org/docs/book/. It mentions wxPerl and has an index of tools and programs that any wxWidgets programmer may find interest.|thumb|This great, but out of print wxWidgets book is available for free (PDF) at https://wxwidgets.org/docs/book/. It mentions wxPerl and has an index of tools and programs that any wxWidgets programmer may find interest.]]&lt;br /&gt;
&#039;&#039;&#039;Cross-Platform GUI Programming with wxWidgets&#039;&#039;&#039; ([https://wxwidgets.org/docs/book/ free PDF!!]) by Julian Smart and Kevin Hock (with Stefan Csomor) is an old, but nice resource to have. It mentions wxPerl quite a bit and has a nice index of tools to help the wxWidgets GUI programmer, regardless of the language they are using. In particular, &amp;quot;Appendix E: Third-Party Tools for wxWidgets&amp;quot; is a very interesting read.&lt;br /&gt;
&lt;br /&gt;
=== Longer List of RAD Tools and GUI Builders* ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [[Developing and Distributing wxPerl Applications on Windows#wxGlade - a Perl Friendly Cross-Platform GUI Builder|wxGlade]] (&#039;&#039;Latest at this time&#039;&#039;, &#039;&#039;&#039;Version 1.1.0, July 7, 2024&#039;&#039;&#039;)&lt;br /&gt;
* [https://web.archive.org/web/20131020024033/http://www.wxdesigner-software.de/download.html wxDesigner] (&#039;&#039;Latest at this time&#039;&#039;, &#039;&#039;&#039;2.14 - wxWidgets 2.8.8/ 2.20a - wxWidgets pre-3.0, May 2009&#039;&#039;&#039;)&lt;br /&gt;
** outputs Perl code&lt;br /&gt;
** archived but a trial is downloadable [https://web.archive.org/web/20131020024033/http://www.wxdesigner-software.de/download.html here] (archive.org)&lt;br /&gt;
** Reliable contact for license: &#039;&#039;undetermined at this time&#039;&#039;&lt;br /&gt;
* [http://www.anthemion.co.uk/dialogblocks/download.htm DialogBlocks] -  &#039;&#039;&#039;(&#039;&#039;&#039;&#039;&#039;Latest at this time&#039;&#039;, &#039;&#039;&#039;Version 5.18, August 21st, 2024)&#039;&#039;&#039;&lt;br /&gt;
** can export C++, XRC, which wxGlade should be able to import&lt;br /&gt;
** No Perl export (see XRC)&lt;br /&gt;
** Cross Platform (Windows, Mac, Linux)&lt;br /&gt;
** Registration required, but support is discontinued - email support@anthemion.co.uk, they may just give you a free key if you are nice :-)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;*You may want to also check this duplicated internal [[Portal:Software Development Tools#wxPerl (wxWidgets wrapper)|page]].&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=Developing_and_Distributing_wxPerl_Applications_on_Windows&amp;diff=340</id>
		<title>Developing and Distributing wxPerl Applications on Windows</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=Developing_and_Distributing_wxPerl_Applications_on_Windows&amp;diff=340"/>
		<updated>2026-07-05T06:54:13Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* Installation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
This article is part of the Perl Lazarus Project, an effort to make Windows GUI development in Perl practical again by identifying a working toolchain for creating, packaging, and distributing desktop applications.&lt;br /&gt;
&lt;br /&gt;
The name is a nod both to Lazarus of the Bible and to the excellent Lazarus IDE for Free Pascal. Perl does not currently have a direct equivalent to that kind of unified rapid application development environment, so this project focuses on documenting a practical path using the tools that are available today.&lt;br /&gt;
&lt;br /&gt;
This page is about installing wxPerl under Strawberry Perl for application development and distribution as a Windows executable.&lt;br /&gt;
&lt;br /&gt;
=== Why Perl GUIs, why Windows? ===&lt;br /&gt;
This is a critical ability for any freelance Perl developer, since it complements a Perl journeyman&#039;s ability to do many things on servers, such as create remote services. Being able to transfer these skills to the desktop environment is especially useful on Windows, where users are accustomed to paying for software. In short, Perl programmers who want to make a living on their own need to know how to create and distribute Windows GUI applications; this page covers a large piece of how to do that.&lt;br /&gt;
[[File:FreeAPIGUI.png|alt=wxPerl GUI running on Windows as a double-clickable EXE file!|thumb|wxPerl GUI running on Windows as a double-clickable EXE file! Created using wxGlade, a RAD-ish tool. See [https://github.com/oodler577/FreeAPI-Perl-API-Explorer more images] on Github.]]&lt;br /&gt;
Instructions are provided with the versions detailed below. If there are newer versions of any of the modules, you may try them out (of course); but understand they have not been tried and shown to work like the version combinations below.&lt;br /&gt;
&lt;br /&gt;
=== [https://dev.to/sciurius/wxperl-revival-5fde See] the original call for a [https://dev.to/sciurius/wxperl-revival-5fde wxPerl Revival]! ===&lt;br /&gt;
&lt;br /&gt;
=== Git Repository of wxGlade / wxPerl Examples ===&lt;br /&gt;
https://github.com/The-Perl-Cottage-Guild/wxPerl-Templates&lt;br /&gt;
== Installing wxPerl on Windows for Development ==&lt;br /&gt;
&lt;br /&gt;
These instructions are for you, not your customers! Give them a clickable installer like Windows users expect (see how here!)&lt;br /&gt;
&lt;br /&gt;
=== General Steps ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Step&lt;br /&gt;
! Component&lt;br /&gt;
! Link&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Strawberry Perl&lt;br /&gt;
| [https://strawberryperl.com/releases.html releases]&lt;br /&gt;
| Install Strawberry Perl first. For the newer PDL-based build, use the PDL ZIP edition rather than the standard MSI.&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Alien::wxWidgets&lt;br /&gt;
| [https://github.com/sciurius/perl-Alien-wxWidgets/releases/ github]&lt;br /&gt;
| Install after Strawberry Perl and wxWidgets are available.&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Wx / wxPerl&lt;br /&gt;
| [https://github.com/sciurius/wxPerl/releases github]&lt;br /&gt;
| Install last; this is the Perl binding used by wxPerl applications.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== More Specific Version Combinations with Detailed Instructions &amp;amp; Links ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Status&lt;br /&gt;
! Strawberry Perl&lt;br /&gt;
! wxWidgets&lt;br /&gt;
! Alien::wxWidgets&lt;br /&gt;
! Wx / wxPerl&lt;br /&gt;
! Detailed Instructions / Links&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Latest / Experimental PDL Build&lt;br /&gt;
| [https://github.com/StrawberryPerl/Perl-Dist-Strawberry/releases/tag/SP_54221_64bit 5.42.2.1 64-bit UCRT, PDL ZIP edition]&lt;br /&gt;
| [https://github.com/wxWidgets/wxWidgets/releases/tag/v3.2.9 3.2.9]&lt;br /&gt;
| [https://github.com/sciurius/perl-Alien-wxWidgets/releases/tag/R0.73 0.73]&lt;br /&gt;
| [https://github.com/sciurius/wxPerl/releases/tag/R3.009 3.009]&lt;br /&gt;
| [[Wx 3.009, Alien::wxWidgets 0.73, Strawberry Perl 5.42.2.1 PDL]]&lt;br /&gt;
| Newer PDL-based build path. The PDL ZIP conventionally unpacks under &amp;lt;code&amp;gt;C:\sw\pdl&amp;lt;/code&amp;gt;. Add &amp;lt;code&amp;gt;C:\sw\pdl\c\bin&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;C:\sw\pdl\perl\site\bin&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;C:\sw\pdl\perl\bin&amp;lt;/code&amp;gt; to the active &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt;. This combination should be treated as experimental until the full build and packaging workflow is verified.&lt;br /&gt;
|-&lt;br /&gt;
| Upstream PowerShell Helper Script&lt;br /&gt;
| [https://github.com/StrawberryPerl/Perl-Dist-Strawberry/releases/tag/SP_54201_64bit 5.42.0.1 64-bit portable, by default]&lt;br /&gt;
| [https://github.com/wxWidgets/wxWidgets/releases/tag/v3.2.9 3.2.9]&lt;br /&gt;
| [https://github.com/sciurius/perl-Alien-wxWidgets/releases/tag/R0.73 0.73]&lt;br /&gt;
| [https://github.com/sciurius/wxPerl/releases/tag/R3.009 3.009]&lt;br /&gt;
| [https://github.com/sciurius/wxGitHubAction/blob/main/script/wxPerl-Windows.ps1 wxPerl-Windows.ps1]&lt;br /&gt;
| Read the script carefully before running it. As written, it installs portable Strawberry Perl, builds wxWidgets from source, manually installs Alien::wxWidgets configuration, then builds Wx. It does not use the PDL ZIP by default, so the script needs adjustment for the &amp;lt;code&amp;gt;C:\sw\pdl&amp;lt;/code&amp;gt; PDL layout. It is best treated as an upstream build recipe or advanced helper, not as the primary beginner installation path.&lt;br /&gt;
|-&lt;br /&gt;
| Previously Tested&lt;br /&gt;
| [https://github.com/StrawberryPerl/Perl-Dist-Strawberry/releases/tag/SP_54021_64bit_UCRT 5.40.2.1 64-bit UCRT MSI]&lt;br /&gt;
| See detailed instructions page&lt;br /&gt;
| [https://github.com/sciurius/perl-Alien-wxWidgets/releases/tag/R0.71 0.71]&lt;br /&gt;
| [https://github.com/sciurius/wxPerl/releases/tag/R3.008 3.008]&lt;br /&gt;
| [[Wx 3.008, Alien::wxWidgets 0.71, Strawberry Perl 5.40.2.1]]&lt;br /&gt;
| Previously documented working combination. This is the safer reference path until the newer PDL build is fully verified.&lt;br /&gt;
|-&lt;br /&gt;
| Archive&lt;br /&gt;
| [https://github.com/StrawberryPerl/Perl-Dist-Strawberry/releases/tag/SP_54001_64bit_UCRT 5.40.0.1 64-bit UCRT MSI]&lt;br /&gt;
| See detailed instructions page&lt;br /&gt;
| [https://github.com/sciurius/perl-Alien-wxWidgets/releases/tag/R0.70 0.70]&lt;br /&gt;
| [https://github.com/sciurius/wxPerl/releases/tag/R3.005 3.005]&lt;br /&gt;
| [[Wx 3.005, Alien::wxWidgets 0.70, Strawberry Perl 5.40.0.1]]&lt;br /&gt;
| Earlier archived working combination. Keep this entry for historical reference and troubleshooting regressions.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Verify Installation ==&lt;br /&gt;
The information provided in this section ought to be unrelated to the verified version combination outlined in the Installation section above. &lt;br /&gt;
&lt;br /&gt;
=== Install Wx::Demo ===&lt;br /&gt;
Wx::Demo is nice demonstration application, highlight many (if not all) of the wxWidget features available via xPerl.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;C:\&amp;gt; cpanm --verbose Wx::Demo&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
.. then once installed, run it with this command (which is available in the PATH already),&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;C:\&amp;gt; wxperl_demo.pl&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== wxGlade - a Perl Friendly Cross-Platform GUI Builder ==&lt;br /&gt;
&lt;br /&gt;
=== Trigger Warning: wxGlade is written in wxPython, so you must install it if you want to use wxGlade to build your GUI. ===&lt;br /&gt;
Totally worth it!&lt;br /&gt;
&lt;br /&gt;
=== Install wxGlade ===&lt;br /&gt;
[https://sourceforge.net/projects/wxglade/ wxGlade] is a GUI builder for wxWidgets applications. It is written in Python, but critically supports outputting Perl code. It is actively developed, and the developer is very responsive on Github to bugs and feature requests. It is the closest thing we have in Perl to a rapid application development environment, in the spirit of [https://www.lazarus-ide.org/ Lazarus] for Free Pascal.&lt;br /&gt;
&lt;br /&gt;
Developers interested in earlier wxWidgets GUI builders and older Perl-capable tools can also see the [[Developing and Distributing wxPerl Applications on Windows#Longer List of RAD Tools and GUI Builders|longer list of RAD tools and GUI builders]] near the end of this page, including some useful but discontinued, archived, or historically important projects.&lt;br /&gt;
=== Step 1 - Install Python 3.10.11 for Windows ===&lt;br /&gt;
Install via following link,&lt;br /&gt;
&lt;br /&gt;
https://www.python.org/ftp/python/3.10.11/python-3.10.11-amd64.exe ([https://www.python.org/downloads/windows/ linked here])&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
# Last tested on &#039;&#039;&#039;25 Jan 2025&#039;&#039;&#039;, although later versions of Python 3 were tested (specifically, 3.12.8), wxPython would install but not run wxGlade properly&lt;br /&gt;
# install as admin (checkbox should be already checked; also opt&#039;d to add &amp;quot;python&amp;quot; to the PATH)&lt;br /&gt;
&lt;br /&gt;
=== Step 2 - Install wxPython ===&lt;br /&gt;
&lt;br /&gt;
# open up the Windows CMD window&lt;br /&gt;
# use pip,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;C:\&amp;gt; pip install wxPython&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: if this fails, you may need to reinstall pip; but it should be available in the CMD window. Based on experience, pip doesn&#039;t seem to be available via the Strawberry Perl terminal, so be sure to get a standard Windows CMD window to do this part.&lt;br /&gt;
&lt;br /&gt;
=== Step 3 - Download and unzip wxGlade ===&lt;br /&gt;
You should probably check if there is a [https://github.com/wxGlade/wxGlade/releases &#039;&#039;&#039;new release&#039;&#039;&#039;], but to get the latest at the time of this update, download: https://github.com/wxGlade/wxGlade/archive/refs/tags/v1.1.1.zip (may want to also try [https://downloads.sourceforge.net/project/wxglade/wxglade/1.1.0/wxGlade-1.1.0_win_amd64.zip?ts=gAAAAABnlJMXBQlBk2CGz7kaN89RrjqS4GEmSk7spuPtf-gFaK_VqcAQAiFCT24GT-SYsq8SVVmCjmhkzq0VycLd7ofhOQoVlA%3D%3D&amp;amp;r=https%3A%2F%2Fsourceforge.net%2Fprojects%2Fwxglade%2Ffiles%2Fwxglade%2F1.1.0%2FwxGlade-1.1.0_win_amd64.zip%2Fdownload%3Fuse_mirror%3Dphoenixnap%26use_mirror%3Dphoenixnap%26r%3Dhttps%253A%252F%252Fsourceforge.net%252Fprojects%252Fwxglade%252Ffiles%252Fwxglade%252F1.1.0%252F wxGlade-1.1.0_win_amd64.zip] - the difference between the two is unclear, but both are tested and both work.)&lt;br /&gt;
[[File:WxgladeWinExample.png|alt=wxGlade running on Windows, showing the design window of a GUI about to be run using wxPerl!|thumb|wxGlade running on Windows, showing the design window of a GUI about to be run using wxPerl!]]&lt;br /&gt;
Via Windows CMD terminal, navigate to the unzipped directory and run the command,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;C:\&amp;gt; python wxglade.py&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Getting wxGlade Help ===&lt;br /&gt;
&#039;&#039;wxGlade&#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;s developer is responsive on Github and there is a semi-active email list on SourceForge,&lt;br /&gt;
&lt;br /&gt;
* Github repo - https://github.com/wxGlade/wxGlade&lt;br /&gt;
* email list - https://sourceforge.net/p/wxglade/mailman/wxglade-general/&lt;br /&gt;
&lt;br /&gt;
== Development Workflow Notes ==&lt;br /&gt;
This section outlines some different workflows that are found among members of the community who use wxPerl. Like any workflow, the based on level of experience and particular application.&lt;br /&gt;
[[File:Wxperl-workflow.png|alt=Example layout with Strawberry Perl for running the application and Makefile, vim under MSYS2 for more streamlined workflow. wxGlade is under there, too; when there is a change to the GUI, the project is saved and code generated using &amp;quot;ctrl-g&amp;quot;. vim is used to edit the code and will update whenever wxGlade updates it, if you do it right your custom code won&#039;t get clobbered.|thumb|Example layout with Strawberry Perl for running the application and Makefile, vim under MSYS2 for more streamlined workflow. wxGlade is under there, too; when there is a change to the GUI, the project is saved and code generated using &amp;quot;ctrl-g&amp;quot;. vim is used to edit the code and will update whenever wxGlade updates it, if you do it right your custom code won&#039;t get clobbered.]]&lt;br /&gt;
&lt;br /&gt;
=== Editor and &amp;lt;code&amp;gt;git&amp;lt;/code&amp;gt; Options on Windows ===&lt;br /&gt;
The best way to recreate the &amp;quot;edit-run-fix&amp;quot; workflow of code editing enjoyed by vim users is to install [https://www.msys2.org/ MSYS2] and use its terminal to install both &amp;lt;code&amp;gt;vim&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;git&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;pacman -S vim git&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: you do not want to run the Perl code generated by wxGlade inside of the MSYS2 terminal. When you install &amp;lt;code&amp;gt;git&amp;lt;/code&amp;gt;, it will install its own perl and clobber Strawberry Perl in your &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt;. Run the Perl code for your project from a Strawberry Perl terminal.&lt;br /&gt;
&lt;br /&gt;
Just like the editor options in Windows is not ideal, neither are the Git options (GH&#039;s &amp;quot;Git for Windows&amp;quot; is exceptionally awkward to use, not sure how to it is possible to be good in &amp;quot;Windows&amp;quot; tbh; YMMV.) Under MSYS2&#039;s terminal,  you may install &amp;lt;code&amp;gt;git&amp;lt;/code&amp;gt; and use it as you may be accustomed on Linux. You may want to generate an ssh-key, which will be vailable in `~/.ssh/` by default. So you can do all the normal git workflow stuff from there once your key is created and added to your Github keyset.&lt;br /&gt;
&lt;br /&gt;
==== Pro Tip: Turn Off MSYS2&#039;s &amp;lt;code&amp;gt;vim&amp;lt;/code&amp;gt; Mouse Support and Auto/Smart Indenting ====&lt;br /&gt;
I have found that this is required to &amp;quot;copy&amp;quot; text from the MSYS2 &amp;lt;code&amp;gt;vim&amp;lt;/code&amp;gt;, you may not need it. But by default &amp;lt;code&amp;gt;vim&amp;lt;/code&amp;gt; is aware of the mouse.&lt;br /&gt;
&lt;br /&gt;
To turn all that off, put the following lines in your &amp;lt;code&amp;gt;~/.vimrc&amp;lt;/code&amp;gt; file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
set mouse=&lt;br /&gt;
set noautoindent&lt;br /&gt;
set nosmartindent&lt;br /&gt;
set nocindent&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Using wxGlade&#039;s &amp;quot;Single file&amp;quot; + &amp;quot;&#039;&#039;Keep user code&#039;&#039;&amp;quot; Options ===&lt;br /&gt;
wxGlade has some settings that tells it to not overwrite changes you made in the output Perl script, but &#039;&#039;&#039;beware&#039;&#039;&#039; - this option is not on by default. That means that means that your file will get overwritten if you tell wxGlade to generate new code again. The general workflow is as follows:&lt;br /&gt;
&lt;br /&gt;
# start a new project (or open an existing one)&lt;br /&gt;
# click on the root &amp;quot;Application&amp;quot; object in the object viewer&lt;br /&gt;
# find the output pane, set the output to be &amp;quot;&#039;&#039;&#039;Perl&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
# set version of wxWidgets to be &amp;quot;&#039;&#039;&#039;3.0&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
# [[File:Applicationsettings.png|alt=Recommended settings for using wxGlade for Perl development.|thumb|Recommended settings for using wxGlade for Perl development.]]check &amp;quot;Keep user code&amp;quot;, this will make sure wxGlade doesn&#039;t overwrite code that is outside the bounds of very clearly marked blocks in the code&lt;br /&gt;
&lt;br /&gt;
=== Using wxGlade&#039;s &amp;quot;&#039;&#039;Separate file for each class&#039;&#039;&amp;quot; Option ===&lt;br /&gt;
... to do&lt;br /&gt;
&lt;br /&gt;
== Creating Windows EXEs ==&lt;br /&gt;
This section is more of a work in progress since a reliable method of distributing single file executables (or developing installation packages for Windows) is still an open question, there is hope that this will end up being a relatively smooth process. Needless to say, it is critical for Perl developer to be able to distribute Perl based GUI applications as single file (.exe) or via installation on Windows. The client should NOT need to be running through any of the instructions above to run a program that you would like to sell them for actual money.&lt;br /&gt;
&lt;br /&gt;
Below are the initial instructions for generating an EXE file. There are also many ways that wxPerl developers go about doing, based on their use case and experience.&lt;br /&gt;
&lt;br /&gt;
=== PAR::Package, App::PP::Autolink, and Wx::Perl::Packager ===&lt;br /&gt;
&lt;br /&gt;
==== Step 1 - Install PAR::Package, App::PP::Autolink, and Wx::Perl::Packager ====&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;C:\&amp;gt; cpanm --verbose PAR::Package App::PP::Autolink Wx::Perl::Packager&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: &amp;lt;code&amp;gt;pp_autolink&amp;lt;/code&amp;gt;, provided by &amp;lt;code&amp;gt;App::PP::Autolink&amp;lt;/code&amp;gt;, has proven to be absolutely critical to finding the required DLLs that need to be added manually to the &amp;lt;code&amp;gt;wxpar&amp;lt;/code&amp;gt; command below via the &amp;lt;code&amp;gt;--link&amp;lt;/code&amp;gt; flag.&lt;br /&gt;
&lt;br /&gt;
==== Step 2 - Generate the EXE ====&lt;br /&gt;
Assuming you have a Perl script generated either via wxGlade (see above) or one you have created/updated by hand, the command is as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;C:\&amp;gt; wxpar YOURPROGRAM.pl -o YOURPROGRAM.exe&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Important Notes About wxGlade Generated Code =====&lt;br /&gt;
# Earlier versions of wxGlade introduced an improper idiom at the bottom of the generated Perl script that caused a problem when running via a PAR::Packed executable. TLDR: remove the &amp;quot;unless(caller)&amp;quot; block and just run the Wx event loop unfettered. For more information, please read the [https://metacpan.org/dist/PAR/view/lib/PAR/FAQ.pod#If-I-try-to-compile-my-wxGlade-generated-script%2C-it-doesn%27t-run.-What%27s-wrong%3F PAR::FAQ.]&lt;br /&gt;
# Earlier versions of wxGlade also used a non-Exporter import tag that wxpar could not properly follow; see the code &amp;quot;before&amp;quot; and &amp;quot;after&amp;quot; below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
use Wx qw[:allclasses];&lt;br /&gt;
use strict;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
package main;&lt;br /&gt;
&lt;br /&gt;
unless(caller){&lt;br /&gt;
    my $local = Wx::Locale-&amp;gt;new(&amp;quot;English&amp;quot;, &amp;quot;en&amp;quot;, &amp;quot;en&amp;quot;); # replace with ??&lt;br /&gt;
    $local-&amp;gt;AddCatalog(&amp;quot;app&amp;quot;); # replace with the appropriate catalog name&lt;br /&gt;
&lt;br /&gt;
    my $app = MyApp-&amp;gt;new();&lt;br /&gt;
    $app-&amp;gt;MainLoop();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Should be modified to look like the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
use Wx;&lt;br /&gt;
use strict;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
package main;&lt;br /&gt;
&lt;br /&gt;
my $local = Wx::Locale-&amp;gt;new(&amp;quot;English&amp;quot;, &amp;quot;en&amp;quot;, &amp;quot;en&amp;quot;); # replace with ??&lt;br /&gt;
$local-&amp;gt;AddCatalog(&amp;quot;app&amp;quot;); # replace with the appropriate catalog name&lt;br /&gt;
&lt;br /&gt;
my $app = MyApp-&amp;gt;new();&lt;br /&gt;
$app-&amp;gt;MainLoop();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See [https://github.com/wxGlade/wxGlade/issues/568 this Github issue] for wxGlade, where both were fixed. At the time of this writing, the changes have not been put out in an official release; but they are applied in the master branch.&lt;br /&gt;
&lt;br /&gt;
==== Special Cases ====&lt;br /&gt;
&lt;br /&gt;
===== &amp;lt;code&amp;gt;Makefile&amp;lt;/code&amp;gt; for an Application uses HTTP::Tiny and calls out to SSL-enabled sites =====&lt;br /&gt;
Example - [https://github.com/StormSurgeLive/nhc-advisory-gui/blob/master/asgs-storm-bug.pl https://github.com/StormSurgeLive/nhc-advisory-gui/]&lt;br /&gt;
&lt;br /&gt;
(copied from the [https://github.com/StormSurgeLive/nhc-advisory-gui/blob/master/Makefile Makefile]) - Note, mentions using [https://metacpan.org/pod/App::PP::Autolink App::PP::Autolink] to suss out required DLLs (provides &amp;lt;code&amp;gt;pp_autolink&amp;lt;/code&amp;gt;, which helped!)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
all:&lt;br /&gt;
        wxpar --verbose -o ./dist/nhc-explorer.exe -l c:/strawberry/c/bin/libcrypto-3-x64__.dll -l c:/strawberry/c/bin/zlib1__.dll -l c:/strawberry/c/bin/libssl-3-x64__.dll ./asgs-storm-bug.pl --gui&lt;br /&gt;
        wxpar --verbose -o ./dist/DEBUG-nhc-explorer.exe -l c:/strawberry/c/bin/libcrypto-3-x64__.dll -l c:/strawberry/c/bin/zlib1__.dll -l c:/strawberry/c/bin/libssl-3-x64__.dll ./asgs-storm-bug.pl&lt;br /&gt;
&lt;br /&gt;
# It was an adventure finding all the dependencies related to the wxpar command,&lt;br /&gt;
# particularly those around what was needed. The basic process entailed:&lt;br /&gt;
# 1. use wxpar, which generates an options file with all the Wx DLLs&lt;br /&gt;
# 2. install App::PP::Autolink, which provides the utility &amp;quot;pp_autolink&amp;quot;; this&lt;br /&gt;
#    utility scans the .pl file you&#039;re packing, in this case, &amp;quot;asgs-storm-bug.pl&amp;quot;,&lt;br /&gt;
#    for DLLs - lo&#039; and behold, it found the ones I needed; in particular the critical&lt;br /&gt;
#    one that was not getting picked up by pp or wxpar, &amp;quot;libcrypto-3-x64___.dll!&amp;quot;&lt;br /&gt;
# 3. run the &amp;quot;wxpar&amp;quot; command above&lt;br /&gt;
# 4. test in a non-Strawberry Perl window, such as the MSYS2 terminal, using the command:&lt;br /&gt;
#&lt;br /&gt;
#      PERL_DL_DEBUG=5 dist/nhc-explorer.exe&lt;br /&gt;
#&lt;br /&gt;
#    I learned about this command while searching, here:&lt;br /&gt;
#&lt;br /&gt;
#      https://stackoverflow.com/questions/423330/why-cant-dynaloader-pm-load-ssleay-dll-for-netssleay-and-cryptssleay&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==== Important Note About Finding all DLLs ====&lt;br /&gt;
It is worth repeating that &amp;lt;code&amp;gt;pp_autolink&amp;lt;/code&amp;gt;, provided by &amp;lt;code&amp;gt;App::PP::Autolink&amp;lt;/code&amp;gt; has proven to be absolutely &#039;&#039;critical&#039;&#039; to finding the required DLLs that need to be added manually to the &amp;lt;code&amp;gt;wxpar&amp;lt;/code&amp;gt; command below via the &amp;lt;code&amp;gt;--link&amp;lt;/code&amp;gt; flag.&lt;br /&gt;
&lt;br /&gt;
If you are having problems finding all the DLLs (some which may not be obvious until the EXE generated is tried on a different machine,) you need to give &amp;lt;code&amp;gt;pp_autolink&amp;lt;/code&amp;gt; a shot.&lt;br /&gt;
&lt;br /&gt;
=== Martha - &#039;&#039;A lightweight wxPerl helper for packaging Perl applications on Windows&#039;&#039; ===&lt;br /&gt;
In February 2026, an exciting new project was launched to help Perl programmers bootstrap creating Windows executables and program installers. Martha, formerly referred to here as wxPerl Helper, is designed to work within the development environment described herein (Strawberry Perl, Alien::wxWidgets, wxPerl, wxGlade). Given this environment, the current &amp;quot;beta&amp;quot; version of the software can assist with the following:&lt;br /&gt;
&lt;br /&gt;
* automatically finds required DLLs&lt;br /&gt;
* generates Makefile, based on using wxpar (a pp wrapper)&lt;br /&gt;
* user can tweak and save the Makefile&lt;br /&gt;
* user can load an existing Makefile&lt;br /&gt;
* user can run the Makefile to create the executable&lt;br /&gt;
* user can run the executable&lt;br /&gt;
* user can configure an Inno Setup provided it is installed&lt;br /&gt;
* run the Inno Setup file to generate an installer for their program&lt;br /&gt;
* finally, they may test the installer directly from the GUI&lt;br /&gt;
&lt;br /&gt;
Martha is targeting the gap that exists for a user that is able to generate Perl code from wxGlade, but then is unsure how to actually distribute their application in the way Windows users expect.&lt;br /&gt;
&lt;br /&gt;
For more information and updates on the project, visit the Github repo [https://github.com/The-Perl-Cottage-Guild/wxPerl-Helper here].&lt;br /&gt;
&lt;br /&gt;
=== Background: Perl, wxWidgets, and RAD on Windows ===&lt;br /&gt;
&lt;br /&gt;
For historical context on earlier Perl/wxWidgets GUI builders, RAD tools, and discontinued Windows application-building efforts, see [[Perl and wxWidgets RAD on Windows]].&lt;br /&gt;
&lt;br /&gt;
== Creating Installers for Windows EXEs ==&lt;br /&gt;
Professional Windows programs are expected to provide installers. This section will be developed as I figure out how to do this. A few notes:&lt;br /&gt;
&lt;br /&gt;
* Strawberry Perl itself uses &#039;&#039;&#039;[https://wixtoolset.org/ WiX Toolset]&#039;&#039;&#039; (Windows Installer XML Toolset) to generate its MSI installer (see [https://github.com/StrawberryPerl/Perl-Dist-Strawberry/blob/master/share/msi/MSI_main-v2.wxs.tt here])&lt;br /&gt;
* &#039;&#039;&#039;[https://nsis.sourceforge.io/Main_Page NSIS]&#039;&#039;&#039; (Nullsoft Scriptable Install System) is another option - ([https://nsis.sourceforge.io/Category:Tutorials tutorials], [https://nsis.sourceforge.io/Category:Code_Examples examples], [https://nsis.sourceforge.io/Screenshots screenshots]) - it also has its own IDE for visually designing installers! [https://nsis.sourceforge.io/NSIS_Dialog_Designer See more here].&lt;br /&gt;
* A possible &amp;quot;old school&amp;quot; approach, may be to use Office&#039;97 Office Developer Edition (ODE) - via Access&#039;97 there is an installer builder - this is a last resort and still needs to be verified to work for non-Access distributions&lt;br /&gt;
* [https://jrsoftware.org/isinfo.php Inno Setup] ([https://github.com/jrsoftware/issrc github]) - &#039;&#039;Inno Setup is a free installer for Windows programs by Jordan Russell and Martijn Laan. First introduced in 1997, Inno Setup today rivals and even surpasses many commercial installers in feature set and stability.&#039;&#039;&lt;br /&gt;
* [https://www.revenera.com/install/products/installshield InstallShield] (commercial - software monetization services)&lt;br /&gt;
&lt;br /&gt;
=== Using Inno Setup ===&lt;br /&gt;
This section briefly describes using [https://jrsoftware.org/isinfo.php Inno Setup] to build an installed for a Windows executable. It seems to be pretty easy to use and has support for many more things than most Perl programmers may actually need. One important thing to note is that it is free for non-commercial use, there is a [https://jrsoftware.org/isorder.php commercial license] required by the author for using this to distribute commercial programs. The license is one-time and entitles the end-user to 2 years of updates. After that, they may continue to use it but will not receive the updates. For all intents and purposes it is a one-time fee, and may considered worth it for some software authors.&lt;br /&gt;
&lt;br /&gt;
Using Inno Setup consists of creating a configuration file, then using the Inno Setup Compiler&#039;s GUI to open up an &amp;quot;.iss&amp;quot; file, then run it interactively. It may also be run on the command line or as part of a Makefile.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/StormSurgeLive/nhc-advisory-gui/blob/master/installer/nhc-explorer.iss Click here] to see an example configuration file used by the NHC Advisory GUI.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/The-Perl-Cottage-Guild/wxPerl-Helper Support] for creating configurations and installers with Inno Setup is also being included in [https://github.com/The-Perl-Cottage-Guild/wxPerl-Helper Martha], the wxPerl helper application being created as part of this Perl Guilds effort to make it easier for traditional Perl programmers to break into the world of commercial Windows GUI programs.&lt;br /&gt;
== Underdeveloped Sections ==&lt;br /&gt;
The following sections are &amp;quot;works in progress,&amp;quot; and remain open questions (for this author anyway). Contributions to develop these sections are greatly appreciated, but not expected. Over time I will update these sections as I learn more about using wxGlade and Perl on Windows.&lt;br /&gt;
&lt;br /&gt;
=== Distributing EXEs to other Windows Machines ===&lt;br /&gt;
While wxpar does indeed create EXEs that can run on Windows machines that do not otherwise have any required libraries on them, I have found some early problems that are most likely due to lack of experience in this area. An understanding of this area is forthcoming.&lt;br /&gt;
&lt;br /&gt;
=== Maintaining Perl Applications using XRC ===&lt;br /&gt;
[https://docs.wxwidgets.org/latest/overview_xrc.html XRC] is a language agnostic and XML based way of describing the GUI layout for wxWidgets. It appears to be the right way to maintain the GUI layout of your production grade program, while maintaining the set of Perl handlers in your own source tree. Think of XRC as the separation of the controller and view in MVC - it to GUI programming what templates are to web application programming. It seems that as one advances his skills in this area, he will want to use XRC. The benefit also of this is that one may be able to create controllers in multiple languages rather than tie the GUI construction in Perl or some other language exclusive - of course, wxGlade can output in different languages, but none is as abstract as XRC.&lt;br /&gt;
[[File:Xrc.png|alt=Wx::Demo example of loading an XRC file; wxGlade can output directly to XRC, which can then be read in Perl. This is how.|thumb|Wx::Demo example of loading an XRC file; wxGlade can output directly to XRC, which can then be read in Perl. [https://metacpan.org/release/MDOOTSON/Wx-Demo-0.22/source/lib/Wx/DemoModules/wxXrc.pm This] is how.]]&lt;br /&gt;
Wx::Demo has a few [https://metacpan.org/release/MDOOTSON/Wx-Demo-0.22/source/lib/Wx/DemoModules/wxXrc.pm good examples] of running XRC applications; wxGlade can output XRC, but it is not aware of any language bindings or drivers for it.&lt;br /&gt;
&lt;br /&gt;
Experience with managing XRC files may allow us as Perl programmers to use RAD tools and GUI builders that were not intended to support wxPerl, but can output XRC files. [http://www.anthemion.co.uk/dialogblocks/download.htm DialogBlocks] is such a professional and commercial GUI builder for wxWidgets, and it is actively maintained.&lt;br /&gt;
&lt;br /&gt;
=== Frequently Asked Questions ===&lt;br /&gt;
Nobody actually contacts me to ask these questions, but they seem to be important.&lt;br /&gt;
&lt;br /&gt;
==== Q: Can these wxPerl applications using Strawberry Perl make &#039;&#039;https&#039;&#039; requests? ====&lt;br /&gt;
A: Yes! Strawberry Perl comes with HTTP::Tiny (a core Perl module) and Net::SSLeay (used by HTTP::Tiny for https requests).&lt;br /&gt;
&lt;br /&gt;
== Additional Resources ==&lt;br /&gt;
&lt;br /&gt;
=== Printed Books ===&lt;br /&gt;
[[File:Wxbook.jpg|alt=This great, but out of print wxWidgets book is available for free (PDF) at https://wxwidgets.org/docs/book/. It mentions wxPerl and has an index of tools and programs that any wxWidgets programmer may find interest.|thumb|This great, but out of print wxWidgets book is available for free (PDF) at https://wxwidgets.org/docs/book/. It mentions wxPerl and has an index of tools and programs that any wxWidgets programmer may find interest.]]&lt;br /&gt;
&#039;&#039;&#039;Cross-Platform GUI Programming with wxWidgets&#039;&#039;&#039; ([https://wxwidgets.org/docs/book/ free PDF!!]) by Julian Smart and Kevin Hock (with Stefan Csomor) is an old, but nice resource to have. It mentions wxPerl quite a bit and has a nice index of tools to help the wxWidgets GUI programmer, regardless of the language they are using. In particular, &amp;quot;Appendix E: Third-Party Tools for wxWidgets&amp;quot; is a very interesting read.&lt;br /&gt;
&lt;br /&gt;
=== Longer List of RAD Tools and GUI Builders* ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [[Developing and Distributing wxPerl Applications on Windows#wxGlade - a Perl Friendly Cross-Platform GUI Builder|wxGlade]] (&#039;&#039;Latest at this time&#039;&#039;, &#039;&#039;&#039;Version 1.1.0, July 7, 2024&#039;&#039;&#039;)&lt;br /&gt;
* [https://web.archive.org/web/20131020024033/http://www.wxdesigner-software.de/download.html wxDesigner] (&#039;&#039;Latest at this time&#039;&#039;, &#039;&#039;&#039;2.14 - wxWidgets 2.8.8/ 2.20a - wxWidgets pre-3.0, May 2009&#039;&#039;&#039;)&lt;br /&gt;
** outputs Perl code&lt;br /&gt;
** archived but a trial is downloadable [https://web.archive.org/web/20131020024033/http://www.wxdesigner-software.de/download.html here] (archive.org)&lt;br /&gt;
** Reliable contact for license: &#039;&#039;undetermined at this time&#039;&#039;&lt;br /&gt;
* [http://www.anthemion.co.uk/dialogblocks/download.htm DialogBlocks] -  &#039;&#039;&#039;(&#039;&#039;&#039;&#039;&#039;Latest at this time&#039;&#039;, &#039;&#039;&#039;Version 5.18, August 21st, 2024)&#039;&#039;&#039;&lt;br /&gt;
** can export C++, XRC, which wxGlade should be able to import&lt;br /&gt;
** No Perl export (see XRC)&lt;br /&gt;
** Cross Platform (Windows, Mac, Linux)&lt;br /&gt;
** Registration required, but support is discontinued - email support@anthemion.co.uk, they may just give you a free key if you are nice :-)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;*You may want to also check this duplicated internal [[Portal:Software Development Tools#wxPerl (wxWidgets wrapper)|page]].&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=Main_Page&amp;diff=339</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=Main_Page&amp;diff=339"/>
		<updated>2026-07-05T06:51:34Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;**NOTOC**&lt;br /&gt;
&lt;br /&gt;
=== Welcome to the Perl Guilds Wiki ===&lt;br /&gt;
The &#039;&#039;&#039;Perl Guilds&#039;&#039;&#039; wiki is a community-driven resource designed to support &#039;&#039;&#039;freelance Perl programmers&#039;&#039;&#039; and help them thrive in their independent careers. The original wiki concept was inspired by [https://wiki.freepascal.org FreePascal]&#039;s community wiki.&lt;br /&gt;
&lt;br /&gt;
This wiki is maintained by [[ServiceProviders|&#039;&#039;&#039;these people&#039;&#039;&#039;]]. You may thank them for this resource by hiring them for something.&lt;br /&gt;
&lt;br /&gt;
=== Transforming Perl by Striving for Virtue ===&lt;br /&gt;
The infamous three &amp;quot;virtues&amp;quot; of a Perl programmer are not what you have been led to believe. They are bad, very bad. Please [https://www.youtube.com/watch?v=mEWfo9U3uTM view this] to learn more about [[The Real 3 Virtues of Perl|&#039;&#039;&#039;the true virtues of Perl&#039;&#039;&#039;]]: &#039;&#039;&#039;&#039;&#039;Prudence&#039;&#039;&#039;&#039;&#039;, &#039;&#039;&#039;&#039;&#039;Spiritedness&#039;&#039;&#039;&#039;&#039;, and &#039;&#039;&#039;&#039;&#039;Good Order&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
I hope to convey these ideals through this resource, and I hope you can help me.&lt;br /&gt;
&lt;br /&gt;
=== Site Feedback and Contributions ===&lt;br /&gt;
Click [https://github.com/The-Perl-Cottage-Guild/wiki-requests/issues here] to report an issue with the content, suggest edits or additions, or request editor access.&lt;br /&gt;
&lt;br /&gt;
You may also [https://sourceforge.net/projects/perl-guilds/lists/perl-guilds-editors &#039;&#039;&#039;join the editors email list&#039;&#039;&#039;] to provide feedback, volunteer, or discuss proposed changes. &amp;lt;u&amp;gt;&#039;&#039;&#039;&#039;&#039;[https://sourceforge.net/projects/perl-guilds/lists/perl-guilds-editors This may get you a quicker response].&#039;&#039;&#039;&#039;&#039;&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Volunteers are eligible to create a listing [[ServiceProviders|here]].&lt;br /&gt;
&lt;br /&gt;
= Portals =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left; width:49%;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
== General Audience Links ==&lt;br /&gt;
&lt;br /&gt;
Wiki portals have been created for a selection of the platforms and topics that Perl and related tools support. The portals gather related information for each platform or topic in one place to make it easier to locate. The full list of supported platforms may be found [[Platform_list|here]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:wxPerl.png|link=Portal:GUIs with Perl|[[Portal:GUIs with Perl|GUIs with Perl]]&lt;br /&gt;
File:Logo Windows 01.png|link=Portal:Windows|[[Portal:Windows|Windows]]&lt;br /&gt;
File:Payment.jpeg|link=Portal:Payment Processing|[[Portal:Payment Processing|Getting Paid]]&lt;br /&gt;
File:Perlopenmp.jpeg|link=Portal:Perl+OpenMP|[[Portal:Perl+OpenMP|Perl+OpenMP]]&lt;br /&gt;
File:Concurrency.png|link=Portal:Concurrency|[[Portal:Concurrency|Concurrency]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:ToolBox.png|link=Portal:Software Development Tools|[[Portal:Software Development Tools|Development Tools]]&lt;br /&gt;
File:perlCGI.jpg|link=Portal:Perl CGI Programming|[[Portal:Perl CGI Programming|Legacy Perl]]&lt;br /&gt;
File:Camels.jpg|link=Portal:Perl Powered Programs (PPP)|[[Portal:Perl Powered Programs (PPP)|Perl Powered Programs (PPP)]]&lt;br /&gt;
File:Perlcommunity.png|link=Portal:Perl Communities|[[Portal:Perl Communities|Communities]]&lt;br /&gt;
File:XS.jpg|link=Portal:Embedding and Extending Perl|[[Portal:Embedding and Extending Perl|Embedding and Extending Perl]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:Money.jpeg|link=Portal:Perl for Profit|[[Portal:Perl for Profit|Perl for Profit]]&lt;br /&gt;
File:History.gif|link=Portal:Perl History|[[Portal:Perl History|Perl History]]&lt;br /&gt;
File:SQLdb TSQLQuery.PNG|link=Portal:Databases|[[Portal:Databases|Database Development]]&lt;br /&gt;
File:GamesPortalLogo.png|link=Portal:Game Development|[[Portal:Game Development|Game Development]]&lt;br /&gt;
File:HowTo.png|link=Portal:HowTo Demos|[[Portal:HowTo Demos|HowTo Demos]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:Rperl.jpeg|link=Portal:Alt. Perls|[[Portal:Alt. Perls|Alt. Perls]]&lt;br /&gt;
File:Ai.jpeg|link=Portal:Artificial Intelligence|[[Portal:Artificial Intelligence|Artificial Intelligence]]&lt;br /&gt;
File:Crypto.png|link=Portal:Crypto and Blockchain|[[Portal:Crypto and Blockchain|Blockchain]]&lt;br /&gt;
File:Perlbooks.jpg|link=Portal:Ex Libris|[[Portal:Ex Libris|Ex Libris]]&lt;br /&gt;
File:Embedded.png|link=Portal:Embedded|[[Portal:Embedded|Embedded]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:FBSD Daemon.jpg|link=Portal:FreeBSD,OpenBSD,etc|[[Portal:FreeBSD,OpenBSD,etc|FreeBSD, OpenBSD, etc.]]&lt;br /&gt;
File:tux.png|link=Portal:Linux|[[Portal:Linux|Linux]]&lt;br /&gt;
File:macOSlogo.png|link=Portal:Mac|[[Portal:Mac|macOS]]&lt;br /&gt;
File:HardwarePortalLogo.png|link=Portal:Hardware and Robotics|[[Portal:Hardware and Robotics|Hardware and Robotics]]&lt;br /&gt;
File:Businessmodels.jpeg|link=Portal:Perl Business Models and Case Studies|[[Portal:Perl Business Models and Case Studies|Perl Business Models and Case Studies]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:ImageMagick.gif|link=Portal:Graphics Programming|[[Portal:Graphics Programming|Graphics Programming]]&lt;br /&gt;
File:Hpc.jpg|link=Portal:HPC - High Performance Computing|[[Portal:HPC - High Performance Computing|HPC - High Performance Computing]]&lt;br /&gt;
File:Bioperl.jpeg|link=Portal:Life Sciences|[[Portal:Life Sciences|Life Sciences]]&lt;br /&gt;
File:tdrawgrid.png|link=Portal:SaaS and Web Development|[[Portal:SaaS and Web Development|SaaS and Web Development]]&lt;br /&gt;
File:tachart getting started step6.png|link=Portal:SciTech|[[Portal:SciTech|Science and Technology]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery spacing=&amp;quot;small&amp;quot; captionalign=&amp;quot;center&amp;quot; position=&amp;quot;center&amp;quot; widths=&amp;quot;64&amp;quot; heights=&amp;quot;64&amp;quot; hideaddbutton=&amp;quot;true&amp;quot; navigation=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
File:NewUserLogo.png|link=Portal:New Users|[[Portal:New Users|New Users]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:right; width:49%;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
== Perl Craftsmen and Professional Development ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This section is for independent software professionals&#039;&#039;&#039; &#039;&#039;&#039;who charge money for Perl-related services&#039;&#039;&#039; and use Perl as their secret weapon to make a living, or for those wishing to become one.&lt;br /&gt;
&lt;br /&gt;
It is not for &amp;quot;jacks of all trades.&amp;quot; This section is for Perl craftsmen: journeymen and true masters who wish to leverage their Perl skills to put food in their kids&#039; mouths and a roof over their heads.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Quick Links&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Developing and Distributing wxPerl Applications on Windows|wxPerl on Windows: developing and distributing wxPerl applications]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notable Updates&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Portal:GUIs with Perl|GUIs with Perl]]&lt;br /&gt;
  ** [[Developing and Distributing wxPerl Applications on Windows]]&lt;br /&gt;
* [[Portal:Perl+OpenMP|Perl+OpenMP]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Email Lists&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[https://sourceforge.net/projects/perl-guilds/lists/perl-guilds-editors Perl-Guilds Wiki Contributors]&#039;&#039;&#039; listserv - join if you would like to contribute or offer regular feedback&lt;br /&gt;
* &#039;&#039;&#039;[https://sourceforge.net/projects/perl-openmp/lists/perl-openmp-discuss Perl+OpenMP]&#039;&#039;&#039; listserv&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: Yes, I encourage email lists for your project; and it turns out SourceForge.net is a great place to host reliable email lists!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;RAD, Rapid Application Development Tools, IDEs, and Installer-Makers&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [https://sourceforge.net/projects/wxglade/ wxGlade] - written in Python, but can output Perl&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Using Perl for Making Windows GUI Programs&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Cross-platform GUIs with wxPerl&lt;br /&gt;
  ** [[Developing and Distributing wxPerl Applications on Windows]]&lt;br /&gt;
* Windows-specific GUIs with Win32::GUI&lt;br /&gt;
* Cross-platform GUIs with GUIDeFATE&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Using Perl for Creating a Commercial SaaS and Other Services&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Monetization Strategies for Perl Programmers&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Commercial Success Stories and Case Studies&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Downloads&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Community Participation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [https://www.perl-guilds.net Perl Guilds Forum] - test forum to see if any activity is drawn to it&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tutorials&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Books and Magazines&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Related Sites&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* https://perlclientdirectory.com/ - curated list of Perl clients for external APIs and services&lt;br /&gt;
* https://perlmodules.net - track changes to your favorite Perl modules in CPAN&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left; margin-right:0.9em;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== In the News ==&lt;br /&gt;
&lt;br /&gt;
A summary of recent news stories about Perl can be found [[In the News|here]].&lt;br /&gt;
&lt;br /&gt;
== Projects using Perl ==&lt;br /&gt;
&lt;br /&gt;
Details and screenshots of an extensive number of applications created with Perl may be found [[Projects using Perl|here]]. There is also plenty of source code that can be found [[:category:Code|here]].&lt;br /&gt;
&lt;br /&gt;
== Bug Tracker ==&lt;br /&gt;
&lt;br /&gt;
The [https://github.com/Perl/perl5/issues Perl Bug Tracker] and the [https://rt.perl.org/ Perl Request Tracker] (RT) are the places to go to check if the anomaly you have encountered has already been recorded as a Perl or Perl module bug. If not, you can lodge a bug report; see [[How do I create a bug report]] so that it can be fixed. Even better, lodge a patch if you can; see [[Creating A Patch]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=Portal:Perl_Powered_Programs_(PPP)&amp;diff=338</id>
		<title>Portal:Perl Powered Programs (PPP)</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=Portal:Perl_Powered_Programs_(PPP)&amp;diff=338"/>
		<updated>2026-07-05T06:46:36Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* Moved / Not Perl-Based */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction=&lt;br /&gt;
&lt;br /&gt;
This portal catalogs programs that are written in Perl, integrate Perl, use Perl heavily, or support Perl programmers.&lt;br /&gt;
&lt;br /&gt;
This is not the place for code that is strictly modules or libraries. You may [mailto:brett[.estrade@gmail.com](mailto:.estrade@gmail.com) email me] to get your program listed here after verification.&lt;br /&gt;
&lt;br /&gt;
=Written in Perl or Perl-Heavy=&lt;br /&gt;
&lt;br /&gt;
== GUI / Web Applications ==&lt;br /&gt;
&lt;br /&gt;
=== Blogging / Publishing ===&lt;br /&gt;
&lt;br /&gt;
* Movable Type (https://movabletype.org/) - long-running commercial blogging and publishing system built around Perl&lt;br /&gt;
* Dada Mail (https://dadamailproject.com/) - web-based mailing list manager written in Perl&lt;br /&gt;
&lt;br /&gt;
=== Content Management Systems / Wikis / Collaboration ===&lt;br /&gt;
&lt;br /&gt;
* ShinyCMS (https://github.com/denny/ShinyCMS) - CMS built in Perl using Catalyst&lt;br /&gt;
* Foswiki (https://foswiki.org/About/WebHome) - Perl-based enterprise wiki and collaboration platform&lt;br /&gt;
* IkiWiki (https://ikiwiki.info/) - wiki compiler / static site generator written in Perl&lt;br /&gt;
* Bugzilla (https://www.bugzilla.org/) - long-running bug tracking system, historically important and still maintained&lt;br /&gt;
* Request Tracker / RT (https://bestpractical.com/request-tracker) - enterprise ticketing and workflow system&lt;br /&gt;
* OTRS / ((OTRS)) Community Edition (https://otrs.com/) - historically important Perl-based help desk, customer service, and IT service management ticketing system. The former open source Community Edition ended after the 6.x line; modern open source continuation is mainly through forks such as Znuny and OTOBO.&lt;br /&gt;
* Znuny (https://www.znuny.org/) - Perl-based help desk / ITSM system descended from the OTRS ecosystem&lt;br /&gt;
&lt;br /&gt;
=== Business / Institutional Systems ===&lt;br /&gt;
&lt;br /&gt;
* Koha (https://koha-community.org/) - open source integrated library system used by libraries&lt;br /&gt;
* LedgerSMB (https://ledgersmb.org/) - open source accounting / ERP system for small and medium businesses&lt;br /&gt;
&lt;br /&gt;
=== Dev/Ops / System Administration ===&lt;br /&gt;
&lt;br /&gt;
* Rex (https://www.rexify.org/&amp;lt;nowiki/&amp;gt;) - use instead of Terraform, Puppet, Ansible, etc. for some automation workflows&lt;br /&gt;
* Webmin (https://webmin.com/) - web-based Unix/Linux system administration panel&lt;br /&gt;
* Virtualmin (https://www.virtualmin.com/) - hosting control panel built on the Webmin ecosystem&lt;br /&gt;
* Usermin (https://www.usermin.com/) - web-based user account / mail / shell management from the Webmin family&lt;br /&gt;
* Proxmox VE (https://github.com/proxmox) - major open source virtualization platform; the backend uses Perl heavily alongside Rust, JavaScript, and C&lt;br /&gt;
* Netdisco (https://netdisco.org/) - web-based network discovery and management tool using SNMP, CLI, and device APIs&lt;br /&gt;
* MySQLTuner (https://github.com/major/MySQLTuner-perl) - widely used MySQL/MariaDB/Percona tuning and diagnostics script written in Perl&lt;br /&gt;
&lt;br /&gt;
=== Email / Mail Filtering / Mail Archives ===&lt;br /&gt;
&lt;br /&gt;
* Apache SpamAssassin (https://spamassassin.apache.org/) - widely deployed anti-spam platform written in Perl&lt;br /&gt;
* Sympa (https://www.sympa.community/) - scalable mailing list manager&lt;br /&gt;
* MHonArc (https://mhonarc.org/) - Perl mail-to-HTML converter and mail archive generator&lt;br /&gt;
* Dada Mail (https://dadamailproject.com/) - mailing list manager for announcement and discussion lists&lt;br /&gt;
&lt;br /&gt;
=== Monitoring / Logging / Statistics ===&lt;br /&gt;
&lt;br /&gt;
* AWStats (https://awstats.sourceforge.io/) - web, streaming, FTP, and mail log analyzer&lt;br /&gt;
* Munin (https://munin-monitoring.org/) - networked resource monitoring and graphing tool&lt;br /&gt;
* SmokePing (https://oss.oetiker.ch/smokeping/) - latency measurement and graphing tool&lt;br /&gt;
* MRTG (https://oss.oetiker.ch/mrtg/) - Multi Router Traffic Grapher; classic network traffic graphing tool written in Perl and C&lt;br /&gt;
&lt;br /&gt;
=== Editors &amp;amp; IDEs ===&lt;br /&gt;
&lt;br /&gt;
* Kephra (https://kephra.sourceforge.net/site/en/home_news.shtml) - wxPerl-based editor&lt;br /&gt;
* Padre (https://padre.perlide.org/) - Perl IDE&lt;br /&gt;
&lt;br /&gt;
=== Link Aggregation ===&lt;br /&gt;
&lt;br /&gt;
* Links (https://codeberg.org/gandalf/Links)&lt;br /&gt;
&lt;br /&gt;
=== Virtualization / VPS / Hosting Control Panels ===&lt;br /&gt;
&lt;br /&gt;
* Proxmox VE (https://github.com/proxmox) - open source virtualization and container platform with a Perl-heavy backend&lt;br /&gt;
* cPanel/WHM (https://cpanel.net) - commercial webhosting control panel; historically Perl-heavy and still ships/supports Perl environments&lt;br /&gt;
* Webmin / Virtualmin (https://webmin.com/) - web-based server administration and hosting management&lt;br /&gt;
&lt;br /&gt;
=== Scientific / Visualization Tools ===&lt;br /&gt;
&lt;br /&gt;
* Circos (https://circos.ca/) - visualization tool widely used for genomics and circular data visualization&lt;br /&gt;
&lt;br /&gt;
== Perl-Based Command-Line Tools ==&lt;br /&gt;
&lt;br /&gt;
* ack (https://beyondgrep.com/) - a better grep for programmers, written in Perl&lt;br /&gt;
* cloc (https://github.com/AlDanial/cloc) - counts lines of code, comments, and whitespace; written entirely in Perl&lt;br /&gt;
* cpanm / App::cpanminus (https://cpanmin.us/) - modern Perl module installer&lt;br /&gt;
* dzil / Dist::Zilla (https://dzil.org/) - release/build automation for CPAN distributions&lt;br /&gt;
* perlcritic (https://metacpan.org/dist/Perl-Critic) - judges Perl code against best practices and idiomatic traditions&lt;br /&gt;
* perltidy (https://metacpan.org/dist/Perl-Tidy) - formats Perl code&lt;br /&gt;
* perlbrew (https://perlbrew.pl/) - install and manage multiple Perl versions in user space&lt;br /&gt;
* plenv (https://github.com/tokuhirom/plenv) - another Perl version manager&lt;br /&gt;
* Carton (https://metacpan.org/pod/Carton) - dependency manager for Perl applications&lt;br /&gt;
* Devel::Cover (https://metacpan.org/pod/Devel::Cover) - Perl code coverage tool&lt;br /&gt;
* prove (https://perldoc.perl.org/prove) - TAP-based test runner included with Perl tooling&lt;br /&gt;
* GNU Parallel (https://www.gnu.org/software/parallel/) - shell parallelization tool implemented as a large Perl script&lt;br /&gt;
* GNU Automake (https://www.gnu.org/software/automake/) - core Autotools component; Automake requires Perl to generate Makefile.in files&lt;br /&gt;
* latexmk (https://ctan.org/pkg/latexmk) - Perl script that automates LaTeX document builds&lt;br /&gt;
&lt;br /&gt;
=Uses Perl Heavily, Includes Perl Pieces, or Supports Perl Developers=&lt;br /&gt;
&lt;br /&gt;
* Git (https://git-scm.com/) - mostly C and shell, but ships Perl-based pieces such as git-svn and Git.pm&lt;br /&gt;
* Debian packaging tools (https://packages.debian.org/) - the Debian packaging ecosystem includes many Perl-based tools and Perl helper packages, including debhelper/devscripts/lintian/dh-make-perl&lt;br /&gt;
* cPanel/WHM (https://cpanel.net) - commercial hosting platform with strong Perl history and supported Perl integration points&lt;br /&gt;
* MobaXterm (https://mobaxterm.mobatek.net/) - X server and Unix-like Windows environment; supports a usable Perl environment&lt;br /&gt;
* wxGlade (https://github.com/wxGlade/wxGlade/releases) - wxWidgets GUI builder that can export wxPerl code&lt;br /&gt;
* Slic3r (https://slic3r.org/) - open source 3D printing slicer; historically Perl-heavy in high-level flow, GUI, and testing, with later forks moving much of that work to C++&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=Portal:Perl_Powered_Programs_(PPP)&amp;diff=337</id>
		<title>Portal:Perl Powered Programs (PPP)</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=Portal:Perl_Powered_Programs_(PPP)&amp;diff=337"/>
		<updated>2026-07-05T06:45:16Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction=&lt;br /&gt;
&lt;br /&gt;
This portal catalogs programs that are written in Perl, integrate Perl, use Perl heavily, or support Perl programmers.&lt;br /&gt;
&lt;br /&gt;
This is not the place for code that is strictly modules or libraries. You may [mailto:brett[.estrade@gmail.com](mailto:.estrade@gmail.com) email me] to get your program listed here after verification.&lt;br /&gt;
&lt;br /&gt;
=Written in Perl or Perl-Heavy=&lt;br /&gt;
&lt;br /&gt;
== GUI / Web Applications ==&lt;br /&gt;
&lt;br /&gt;
=== Blogging / Publishing ===&lt;br /&gt;
&lt;br /&gt;
* Movable Type (https://movabletype.org/) - long-running commercial blogging and publishing system built around Perl&lt;br /&gt;
* Dada Mail (https://dadamailproject.com/) - web-based mailing list manager written in Perl&lt;br /&gt;
&lt;br /&gt;
=== Content Management Systems / Wikis / Collaboration ===&lt;br /&gt;
&lt;br /&gt;
* ShinyCMS (https://github.com/denny/ShinyCMS) - CMS built in Perl using Catalyst&lt;br /&gt;
* Foswiki (https://foswiki.org/About/WebHome) - Perl-based enterprise wiki and collaboration platform&lt;br /&gt;
* IkiWiki (https://ikiwiki.info/) - wiki compiler / static site generator written in Perl&lt;br /&gt;
* Bugzilla (https://www.bugzilla.org/) - long-running bug tracking system, historically important and still maintained&lt;br /&gt;
* Request Tracker / RT (https://bestpractical.com/request-tracker) - enterprise ticketing and workflow system&lt;br /&gt;
* OTRS / ((OTRS)) Community Edition (https://otrs.com/) - historically important Perl-based help desk, customer service, and IT service management ticketing system. The former open source Community Edition ended after the 6.x line; modern open source continuation is mainly through forks such as Znuny and OTOBO.&lt;br /&gt;
* Znuny (https://www.znuny.org/) - Perl-based help desk / ITSM system descended from the OTRS ecosystem&lt;br /&gt;
&lt;br /&gt;
=== Business / Institutional Systems ===&lt;br /&gt;
&lt;br /&gt;
* Koha (https://koha-community.org/) - open source integrated library system used by libraries&lt;br /&gt;
* LedgerSMB (https://ledgersmb.org/) - open source accounting / ERP system for small and medium businesses&lt;br /&gt;
&lt;br /&gt;
=== Dev/Ops / System Administration ===&lt;br /&gt;
&lt;br /&gt;
* Rex (https://www.rexify.org/&amp;lt;nowiki/&amp;gt;) - use instead of Terraform, Puppet, Ansible, etc. for some automation workflows&lt;br /&gt;
* Webmin (https://webmin.com/) - web-based Unix/Linux system administration panel&lt;br /&gt;
* Virtualmin (https://www.virtualmin.com/) - hosting control panel built on the Webmin ecosystem&lt;br /&gt;
* Usermin (https://www.usermin.com/) - web-based user account / mail / shell management from the Webmin family&lt;br /&gt;
* Proxmox VE (https://github.com/proxmox) - major open source virtualization platform; the backend uses Perl heavily alongside Rust, JavaScript, and C&lt;br /&gt;
* Netdisco (https://netdisco.org/) - web-based network discovery and management tool using SNMP, CLI, and device APIs&lt;br /&gt;
* MySQLTuner (https://github.com/major/MySQLTuner-perl) - widely used MySQL/MariaDB/Percona tuning and diagnostics script written in Perl&lt;br /&gt;
&lt;br /&gt;
=== Email / Mail Filtering / Mail Archives ===&lt;br /&gt;
&lt;br /&gt;
* Apache SpamAssassin (https://spamassassin.apache.org/) - widely deployed anti-spam platform written in Perl&lt;br /&gt;
* Sympa (https://www.sympa.community/) - scalable mailing list manager&lt;br /&gt;
* MHonArc (https://mhonarc.org/) - Perl mail-to-HTML converter and mail archive generator&lt;br /&gt;
* Dada Mail (https://dadamailproject.com/) - mailing list manager for announcement and discussion lists&lt;br /&gt;
&lt;br /&gt;
=== Monitoring / Logging / Statistics ===&lt;br /&gt;
&lt;br /&gt;
* AWStats (https://awstats.sourceforge.io/) - web, streaming, FTP, and mail log analyzer&lt;br /&gt;
* Munin (https://munin-monitoring.org/) - networked resource monitoring and graphing tool&lt;br /&gt;
* SmokePing (https://oss.oetiker.ch/smokeping/) - latency measurement and graphing tool&lt;br /&gt;
* MRTG (https://oss.oetiker.ch/mrtg/) - Multi Router Traffic Grapher; classic network traffic graphing tool written in Perl and C&lt;br /&gt;
&lt;br /&gt;
=== Editors &amp;amp; IDEs ===&lt;br /&gt;
&lt;br /&gt;
* Kephra (https://kephra.sourceforge.net/site/en/home_news.shtml) - wxPerl-based editor&lt;br /&gt;
* Padre (https://padre.perlide.org/) - Perl IDE&lt;br /&gt;
&lt;br /&gt;
=== Link Aggregation ===&lt;br /&gt;
&lt;br /&gt;
* Links (https://codeberg.org/gandalf/Links)&lt;br /&gt;
&lt;br /&gt;
=== Virtualization / VPS / Hosting Control Panels ===&lt;br /&gt;
&lt;br /&gt;
* Proxmox VE (https://github.com/proxmox) - open source virtualization and container platform with a Perl-heavy backend&lt;br /&gt;
* cPanel/WHM (https://cpanel.net) - commercial webhosting control panel; historically Perl-heavy and still ships/supports Perl environments&lt;br /&gt;
* Webmin / Virtualmin (https://webmin.com/) - web-based server administration and hosting management&lt;br /&gt;
&lt;br /&gt;
=== Scientific / Visualization Tools ===&lt;br /&gt;
&lt;br /&gt;
* Circos (https://circos.ca/) - visualization tool widely used for genomics and circular data visualization&lt;br /&gt;
&lt;br /&gt;
== Perl-Based Command-Line Tools ==&lt;br /&gt;
&lt;br /&gt;
* ack (https://beyondgrep.com/) - a better grep for programmers, written in Perl&lt;br /&gt;
* cloc (https://github.com/AlDanial/cloc) - counts lines of code, comments, and whitespace; written entirely in Perl&lt;br /&gt;
* cpanm / App::cpanminus (https://cpanmin.us/) - modern Perl module installer&lt;br /&gt;
* dzil / Dist::Zilla (https://dzil.org/) - release/build automation for CPAN distributions&lt;br /&gt;
* perlcritic (https://metacpan.org/dist/Perl-Critic) - judges Perl code against best practices and idiomatic traditions&lt;br /&gt;
* perltidy (https://metacpan.org/dist/Perl-Tidy) - formats Perl code&lt;br /&gt;
* perlbrew (https://perlbrew.pl/) - install and manage multiple Perl versions in user space&lt;br /&gt;
* plenv (https://github.com/tokuhirom/plenv) - another Perl version manager&lt;br /&gt;
* Carton (https://metacpan.org/pod/Carton) - dependency manager for Perl applications&lt;br /&gt;
* Devel::Cover (https://metacpan.org/pod/Devel::Cover) - Perl code coverage tool&lt;br /&gt;
* prove (https://perldoc.perl.org/prove) - TAP-based test runner included with Perl tooling&lt;br /&gt;
* GNU Parallel (https://www.gnu.org/software/parallel/) - shell parallelization tool implemented as a large Perl script&lt;br /&gt;
* GNU Automake (https://www.gnu.org/software/automake/) - core Autotools component; Automake requires Perl to generate Makefile.in files&lt;br /&gt;
* latexmk (https://ctan.org/pkg/latexmk) - Perl script that automates LaTeX document builds&lt;br /&gt;
&lt;br /&gt;
=Uses Perl Heavily, Includes Perl Pieces, or Supports Perl Developers=&lt;br /&gt;
&lt;br /&gt;
* Git (https://git-scm.com/) - mostly C and shell, but ships Perl-based pieces such as git-svn and Git.pm&lt;br /&gt;
* Debian packaging tools (https://packages.debian.org/) - the Debian packaging ecosystem includes many Perl-based tools and Perl helper packages, including debhelper/devscripts/lintian/dh-make-perl&lt;br /&gt;
* cPanel/WHM (https://cpanel.net) - commercial hosting platform with strong Perl history and supported Perl integration points&lt;br /&gt;
* MobaXterm (https://mobaxterm.mobatek.net/) - X server and Unix-like Windows environment; supports a usable Perl environment&lt;br /&gt;
* wxGlade (https://github.com/wxGlade/wxGlade/releases) - wxWidgets GUI builder that can export wxPerl code&lt;br /&gt;
* Slic3r (https://slic3r.org/) - open source 3D printing slicer; historically Perl-heavy in high-level flow, GUI, and testing, with later forks moving much of that work to C++&lt;br /&gt;
&lt;br /&gt;
=Moved / Not Perl-Based=&lt;br /&gt;
&lt;br /&gt;
These are useful programs, but should not be listed under &amp;quot;Written in Perl&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
* PmWiki (https://www.pmwiki.org/) - written in PHP&lt;br /&gt;
* TiddlyWiki (https://tiddlywiki.com/) - written in JavaScript&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
</feed>