<?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=104.181.193.235</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=104.181.193.235"/>
	<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=Special:Contributions/104.181.193.235"/>
	<updated>2026-08-01T00:02:19Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=Raising_a_Working_wxPerl_Shop_on_Windows&amp;diff=377</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=377"/>
		<updated>2026-07-20T06:28:32Z</updated>

		<summary type="html">&lt;p&gt;104.181.193.235: &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;
&amp;lt;pre&amp;gt;&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;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the generated program does not run, do not begin installing PAR or building an executable.&lt;br /&gt;
&lt;br /&gt;
The source application must work first.&lt;br /&gt;
&lt;br /&gt;
Read the error from the Strawberry terminal. Confirm that the active Perl is correct. Compare the generated application with the hand-written &amp;lt;code&amp;gt;hello-wx.pl&amp;lt;/code&amp;gt; which already worked.&lt;br /&gt;
&lt;br /&gt;
The proven lower layer is a diagnostic advantage.&lt;br /&gt;
&lt;br /&gt;
== Wire the first event ==&lt;br /&gt;
&lt;br /&gt;
Return to wxGlade and select the button.&lt;br /&gt;
&lt;br /&gt;
Assign its button-click event to a handler named:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
on_hello&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Save the project and press &amp;lt;code&amp;gt;Ctrl-G&amp;lt;/code&amp;gt; again.&lt;br /&gt;
&lt;br /&gt;
Return to vim. Allow vim to reload the changed file if it detects that wxGlade has modified it.&lt;br /&gt;
&lt;br /&gt;
Locate the generated &amp;lt;code&amp;gt;on_hello&amp;lt;/code&amp;gt; handler. Add behavior only in the user-preserved area intended for the handler:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
sub on_hello {&lt;br /&gt;
    my ($self, $event) = @_;&lt;br /&gt;
&lt;br /&gt;
    Wx::MessageBox(&lt;br /&gt;
        &#039;Your wxPerl shop is working.&#039;,&lt;br /&gt;
        &#039;Perl Lazarus Project&#039;,&lt;br /&gt;
        Wx::wxOK(),&lt;br /&gt;
        $self,&lt;br /&gt;
    );&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The exact generated function signature or location may vary with the wxGlade release and project structure. Preserve the structure emitted by wxGlade and add the application behavior to the appropriate handler.&lt;br /&gt;
&lt;br /&gt;
Save the file.&lt;br /&gt;
&lt;br /&gt;
Run it again from Strawberry Perl:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
perl hello-wxperl.pl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Click the button.&lt;br /&gt;
&lt;br /&gt;
A message box should appear.&lt;br /&gt;
&lt;br /&gt;
The shop now supports the complete elementary cycle:&lt;br /&gt;
&lt;br /&gt;
* visual design;&lt;br /&gt;
* Perl generation;&lt;br /&gt;
* manual wiring;&lt;br /&gt;
* execution;&lt;br /&gt;
* and user interaction.&lt;br /&gt;
&lt;br /&gt;
Commit the result:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git add hello-wxperl.wxg hello-wxperl.pl&lt;br /&gt;
git commit -m &amp;quot;Wire first wxPerl button event&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Practice the edit–emit–wire–run cycle ==&lt;br /&gt;
&lt;br /&gt;
[[File:Wxperl-workflow.png|thumb|right|410px|alt=Windows desktop arranged with Strawberry Perl, MSYS2 vim, and wxGlade for an efficient wxPerl development workflow|A practical working arrangement: wxGlade emits Perl, vim under MSYS2 inspects and edits it, and the Strawberry Perl terminal runs the application.]]&lt;br /&gt;
&lt;br /&gt;
Make one further visual change:&lt;br /&gt;
&lt;br /&gt;
* change the frame title;&lt;br /&gt;
* add another label;&lt;br /&gt;
* alter the button text;&lt;br /&gt;
* or adjust the spacing.&lt;br /&gt;
&lt;br /&gt;
Before generating, check Git:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Commit or stash any unfinished handwritten work.&lt;br /&gt;
&lt;br /&gt;
Generate again with &amp;lt;code&amp;gt;Ctrl-G&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Inspect the diff:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git diff&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Confirm that the handler remains present.&lt;br /&gt;
&lt;br /&gt;
Run the application with Strawberry Perl.&lt;br /&gt;
&lt;br /&gt;
Then commit the visual revision.&lt;br /&gt;
&lt;br /&gt;
This cycle should become habitual:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Design in wxGlade&lt;br /&gt;
        ↓&lt;br /&gt;
Save the .wxg project&lt;br /&gt;
        ↓&lt;br /&gt;
Generate Perl with Ctrl-G&lt;br /&gt;
        ↓&lt;br /&gt;
Inspect the diff in MSYS2&lt;br /&gt;
        ↓&lt;br /&gt;
Wire or revise behavior in vim&lt;br /&gt;
        ↓&lt;br /&gt;
Run with Strawberry Perl&lt;br /&gt;
        ↓&lt;br /&gt;
Test the actual user action&lt;br /&gt;
        ↓&lt;br /&gt;
Commit the known-good result&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Generated code should never become an excuse to stop reading code.&lt;br /&gt;
&lt;br /&gt;
The craftsman should know what changed.&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;
== Using AI without surrendering the craft ==&lt;br /&gt;
&lt;br /&gt;
AI can be effective at two points in this workflow.&lt;br /&gt;
&lt;br /&gt;
First, it can prepare a first-draft wxGlade XML project from a plain-language description.&lt;br /&gt;
&lt;br /&gt;
Second, it can assist with the Perl wiring which connects generated controls to application behavior.&lt;br /&gt;
&lt;br /&gt;
The [https://github.com/The-Perl-Cottage-Guild/wxPerl-wxGlade-Templates wxPerl and wxGlade template repository] demonstrates this possibility. Its GUI templates were initially created with ChatGPT and then used as wxGlade projects and Perl examples.&lt;br /&gt;
&lt;br /&gt;
A productive AI-assisted cycle is:&lt;br /&gt;
&lt;br /&gt;
# Describe the intended window and controls.&lt;br /&gt;
# Ask for a wxGlade-compatible &amp;lt;code&amp;gt;.wxg&amp;lt;/code&amp;gt; draft.&lt;br /&gt;
# Save the XML to a file.&lt;br /&gt;
# Open it in wxGlade.&lt;br /&gt;
# Correct invalid properties, names, nesting, and layout.&lt;br /&gt;
# Save it through wxGlade.&lt;br /&gt;
# Emit Perl.&lt;br /&gt;
# Run the generated application.&lt;br /&gt;
# Ask for assistance wiring a named event.&lt;br /&gt;
# Review every change.&lt;br /&gt;
# Test the user action.&lt;br /&gt;
# Commit only the result which has actually been verified.&lt;br /&gt;
&lt;br /&gt;
A useful prompt might specify:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Create a first-draft wxGlade 1.1.1 XML project for a wxWidgets 3.0&lt;br /&gt;
application. The output language will be Perl. Include one frame,&lt;br /&gt;
a panel, a vertical box sizer, a status label, and a button named&lt;br /&gt;
hello_button. The button event handler should be named on_hello.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The AI-generated file is not authoritative merely because it is well formed.&lt;br /&gt;
&lt;br /&gt;
wxGlade is the first practical judge of whether the XML describes a valid project. The generated Perl and the running application provide further tests. The craftsman provides the final judgment.&lt;br /&gt;
&lt;br /&gt;
God is the source of human intelligence and talent. AI is a human-made tool assembled from created materials, accumulated knowledge, infrastructure, and labor. It is not a person, an apprentice, a master, or a moral agent.&lt;br /&gt;
&lt;br /&gt;
It can assist the work.&lt;br /&gt;
&lt;br /&gt;
It cannot accept responsibility for it.&lt;br /&gt;
&lt;br /&gt;
== Troubleshoot in the order the shop was built ==&lt;br /&gt;
&lt;br /&gt;
When the project fails, resist the temptation to change everything at once.&lt;br /&gt;
&lt;br /&gt;
Use this order:&lt;br /&gt;
&lt;br /&gt;
=== 1. Confirm the active Perl ===&lt;br /&gt;
&lt;br /&gt;
In the Strawberry command window:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
where perl&lt;br /&gt;
perl -v&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In MSYS2:&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;
Know which result belongs to which environment.&lt;br /&gt;
&lt;br /&gt;
=== 2. Confirm the modules ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
perl -MAlien::wxWidgets -e &amp;quot;print qq{$Alien::wxWidgets::VERSION\n}&amp;quot;&lt;br /&gt;
perl -MWx -e &amp;quot;print qq{$Wx::VERSION\n}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 3. Run the hand-written frame ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
perl C:\wxperl-shop\hello-wx.pl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If this fails, the problem is beneath wxGlade.&lt;br /&gt;
&lt;br /&gt;
=== 4. Run Wx::Demo ===&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;
This provides a broader binding test.&lt;br /&gt;
&lt;br /&gt;
=== 5. Run the generated program ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
perl C:\work\hello-wxperl\hello-wxperl.pl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Read the first meaningful error rather than only the last line.&lt;br /&gt;
&lt;br /&gt;
=== 6. Inspect the most recent generation ===&lt;br /&gt;
&lt;br /&gt;
From MSYS2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git diff&lt;br /&gt;
git status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Check whether handwritten code disappeared or a generated block changed unexpectedly.&lt;br /&gt;
&lt;br /&gt;
=== 7. Return to the last known-good commit ===&lt;br /&gt;
&lt;br /&gt;
Do not destroy evidence in panic. Create a branch or preserve the broken state before reverting.&lt;br /&gt;
&lt;br /&gt;
=== 8. Change one layer at a time ===&lt;br /&gt;
&lt;br /&gt;
Do not simultaneously update Strawberry Perl, wxPerl, Python, wxGlade, and MSYS2 while investigating one failure.&lt;br /&gt;
&lt;br /&gt;
A workshop can be repaired only when the craftsman knows what changed.&lt;br /&gt;
&lt;br /&gt;
== The craft and the virtue ==&lt;br /&gt;
&lt;br /&gt;
This stage of the journey requires spiritedness, or fortitude, rather than impatience.&lt;br /&gt;
&lt;br /&gt;
Installation work is often wearying because the visible reward comes late. The programmer may spend considerable time reading compiler output, comparing paths, waiting for native builds, and discovering that one command was executed from the wrong terminal.&lt;br /&gt;
&lt;br /&gt;
Impatience responds by changing versions randomly, rerunning commands without reading their output, disabling safeguards, or abandoning the whole effort as soon as the first path fails.&lt;br /&gt;
&lt;br /&gt;
Fortitude does not mean mindless repetition.&lt;br /&gt;
&lt;br /&gt;
It means remaining with a worthy difficulty long enough to understand it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
“And if a man love justice: her labours have great virtues; for she teacheth temperance, and prudence, and justice, and fortitude.”&lt;br /&gt;
&amp;lt;br /&amp;gt;— Wisdom 8:7, Douay-Rheims&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The craftsman begins with gratitude.&lt;br /&gt;
&lt;br /&gt;
The world in which he works was created by God. His intelligence, memory, patience, opportunity, and capacity to learn are gifts. The compiler, language, GUI library, editor, examples, documentation, and operating system also contain the labor and talents of other persons.&lt;br /&gt;
&lt;br /&gt;
Raising the shop is therefore an exercise in stewardship.&lt;br /&gt;
&lt;br /&gt;
The programmer receives tools and knowledge, develops his own abilities, and prepares himself to perform work for others.&lt;br /&gt;
&lt;br /&gt;
A failure does not diminish the programmer&#039;s God-given dignity. A successful installation does not make him superior to the apprentice who is still learning. Technical progress measures the present state of the work, not the worth of the worker.&lt;br /&gt;
&lt;br /&gt;
Fortitude allows the programmer to admit:&lt;br /&gt;
&lt;br /&gt;
* “I used the wrong Perl.”&lt;br /&gt;
* “I do not yet understand this generated block.”&lt;br /&gt;
* “The experimental profile has not been verified.”&lt;br /&gt;
* “I need to return to the documented version.”&lt;br /&gt;
* “My AI-generated XML is invalid.”&lt;br /&gt;
* “I overwrote my code because I failed to enable the correct setting.”&lt;br /&gt;
* “I need help from another craftsman.”&lt;br /&gt;
&lt;br /&gt;
These admissions are not defeats.&lt;br /&gt;
&lt;br /&gt;
They are acts of truth.&lt;br /&gt;
&lt;br /&gt;
The shop becomes dependable when the craftsman prefers truth over appearance: a real test over an assumption, a saved log over memory, a Git diff over confidence, and a known working profile over the prestige of using the newest release.&lt;br /&gt;
&lt;br /&gt;
The purpose is not to boast that wxPerl can display a window.&lt;br /&gt;
&lt;br /&gt;
The purpose is to prepare a place in which useful software can be built faithfully and brought to completion.&lt;br /&gt;
&lt;br /&gt;
== At the workbench: the first-shop checkpoint ==&lt;br /&gt;
&lt;br /&gt;
Before proceeding, confirm that all of the following exist:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Check&lt;br /&gt;
! Evidence&lt;br /&gt;
|-&lt;br /&gt;
| Strawberry Perl is active&lt;br /&gt;
| Saved output from &amp;lt;code&amp;gt;where perl&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;perl -v&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Native build tools exist&lt;br /&gt;
| &amp;lt;code&amp;gt;gcc&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;gmake&amp;lt;/code&amp;gt; are found&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Alien::wxWidgets&amp;lt;/code&amp;gt; loads&lt;br /&gt;
| Version command succeeds&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Wx&amp;lt;/code&amp;gt; loads&lt;br /&gt;
| Version command succeeds&lt;br /&gt;
|-&lt;br /&gt;
| A hand-written frame runs&lt;br /&gt;
| &amp;lt;code&amp;gt;hello-wx.pl&amp;lt;/code&amp;gt; opens and closes&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Wx::Demo&amp;lt;/code&amp;gt; runs&lt;br /&gt;
| Demonstration controls can be opened&lt;br /&gt;
|-&lt;br /&gt;
| wxGlade runs&lt;br /&gt;
| The application launches through a repeatable shortcut or command&lt;br /&gt;
|-&lt;br /&gt;
| wxGlade emits Perl&lt;br /&gt;
| &amp;lt;code&amp;gt;hello-wxperl.pl&amp;lt;/code&amp;gt; exists&lt;br /&gt;
|-&lt;br /&gt;
| The generated application runs&lt;br /&gt;
| The frame appears under Strawberry Perl&lt;br /&gt;
|-&lt;br /&gt;
| An event is wired&lt;br /&gt;
| The button displays a message&lt;br /&gt;
|-&lt;br /&gt;
| MSYS2 contains vim and Git&lt;br /&gt;
| Both version commands succeed&lt;br /&gt;
|-&lt;br /&gt;
| The two Perl environments are understood&lt;br /&gt;
| &amp;lt;code&amp;gt;which perl&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;where perl&amp;lt;/code&amp;gt; have been compared&lt;br /&gt;
|-&lt;br /&gt;
| The project is preserved&lt;br /&gt;
| At least two meaningful Git commits exist&lt;br /&gt;
|-&lt;br /&gt;
| The process is documented&lt;br /&gt;
| &amp;lt;code&amp;gt;wxperl-environment.txt&amp;lt;/code&amp;gt; and logs exist&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Also preserve:&lt;br /&gt;
&lt;br /&gt;
* the &amp;lt;code&amp;gt;.wxg&amp;lt;/code&amp;gt; project;&lt;br /&gt;
* the emitted Perl;&lt;br /&gt;
* the hand-written verification program;&lt;br /&gt;
* one screenshot of the running application;&lt;br /&gt;
* the installation logs;&lt;br /&gt;
* and the project history.&lt;br /&gt;
&lt;br /&gt;
The result is modest, but it is real.&lt;br /&gt;
&lt;br /&gt;
The programmer now possesses a working Windows wxPerl shop.&lt;br /&gt;
&lt;br /&gt;
== Continue the journey ==&lt;br /&gt;
&lt;br /&gt;
The next essay, [[From wxGlade Layout to Working Perl Application]], will move beyond the demonstration project.&lt;br /&gt;
&lt;br /&gt;
It will examine:&lt;br /&gt;
&lt;br /&gt;
* how wxGlade-generated Perl is organized;&lt;br /&gt;
* which parts of the source belong to the generator;&lt;br /&gt;
* how controls should be named;&lt;br /&gt;
* how events should be assigned;&lt;br /&gt;
* how business logic can be kept outside the GUI;&lt;br /&gt;
* how repeated regeneration can remain safe;&lt;br /&gt;
* when separate generated classes or XRC may become useful;&lt;br /&gt;
* and how a graphical prototype becomes a maintainable Perl application.&lt;br /&gt;
&lt;br /&gt;
The shop has been raised.&lt;br /&gt;
&lt;br /&gt;
The next task is to practice the craft within it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:Raising a Working wxPerl Shop on Windows}}&lt;br /&gt;
&lt;br /&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;
&#039;&#039;&#039;Next essay:&#039;&#039;&#039; [[From wxGlade Layout to Working Perl Application]]&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:wxGlade]]&lt;br /&gt;
[[Category:MSYS2]]&lt;br /&gt;
[[Category:Git]]&lt;/div&gt;</summary>
		<author><name>104.181.193.235</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=Wx_3.009,_Alien::wxWidgets_0.73,_Strawberry_Perl_5.42.2.1_PDL&amp;diff=333</id>
		<title>Wx 3.009, Alien::wxWidgets 0.73, Strawberry Perl 5.42.2.1 PDL</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=Wx_3.009,_Alien::wxWidgets_0.73,_Strawberry_Perl_5.42.2.1_PDL&amp;diff=333"/>
		<updated>2026-07-05T06:30:21Z</updated>

		<summary type="html">&lt;p&gt;104.181.193.235: Created page with &amp;quot;=== Step 1 - Install Strawberry Perl PDL (5.42.2.1) ===  Install the Strawberry Perl PDL ZIP edition from the Strawberry Perl release page:  &amp;lt;big&amp;gt;[https://github.com/StrawberryPerl/Perl-Dist-Strawberry/releases/tag/SP_54221_64bit Strawberry Perl 5.42.2.1 64-bit release assets]&amp;lt;/big&amp;gt;  Download:  &amp;lt;big&amp;gt;&amp;lt;code&amp;gt;strawberry-perl-5.42.2.1-64bit-PDL.zip&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;  ==== Installing Strawberry Perl (5.42.2.1) + PDL ====  This build uses the Strawberry Perl PDL edition rather than...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Step 1 - Install Strawberry Perl PDL (5.42.2.1) ===&lt;br /&gt;
&lt;br /&gt;
Install the Strawberry Perl PDL ZIP edition from the Strawberry Perl release page:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;[https://github.com/StrawberryPerl/Perl-Dist-Strawberry/releases/tag/SP_54221_64bit Strawberry Perl 5.42.2.1 64-bit release assets]&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;strawberry-perl-5.42.2.1-64bit-PDL.zip&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Installing Strawberry Perl (5.42.2.1) + PDL ====&lt;br /&gt;
&lt;br /&gt;
This build uses the Strawberry Perl PDL edition rather than the standard MSI. The PDL ZIP conventionally unpacks under:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;C:\sw\pdl&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This provides a Windows Perl environment that includes the Perl Data Language. See [https://wiki.perl-guilds.net/Portal:SciTech notes on creating a Perl environment using Strawberry Perl that includes PDL].&lt;br /&gt;
&lt;br /&gt;
After extracting the ZIP, make sure the following directories are available in the active &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
C:\sw\pdl\c\bin&lt;br /&gt;
C:\sw\pdl\perl\site\bin&lt;br /&gt;
C:\sw\pdl\perl\bin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can verify the Perl and PDL installation with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;C:\&amp;gt; perl -v&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;C:\&amp;gt; perl -MPDL -E &amp;quot;say $PDL::VERSION&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once this is set up, the rest of the instructions starting with Step 2 below should work the same.&lt;br /&gt;
&lt;br /&gt;
=== Step 2 - Install Alien::wxWidgets (v 0.73) ===&lt;br /&gt;
&lt;br /&gt;
Once Perl is installed and the Strawberry Perl PDL directories are in the active &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt;, open a Windows CMD window or PowerShell window using that environment.&lt;br /&gt;
&lt;br /&gt;
Type the command at the &amp;lt;code&amp;gt;C:\&amp;gt;&amp;lt;/code&amp;gt; prompt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;C:\&amp;gt; cpanm --verbose &amp;lt;nowiki&amp;gt;https://github.com/sciurius/perl-Alien-wxWidgets/releases/download/R0.73/Alien-wxWidgets-0.73.tar.gz&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 3 - Install Wx / wxPerl (v 3.009) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;C:\&amp;gt; cpanm --verbose &amp;lt;nowiki&amp;gt;https://github.com/sciurius/wxPerl/releases/download/R3.009/Wx-3.009.tar.gz&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Verified Version Combination ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Component&lt;br /&gt;
! Version&lt;br /&gt;
! Link&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Strawberry Perl&lt;br /&gt;
| 5.42.2.1 64-bit UCRT, PDL ZIP edition&lt;br /&gt;
| [https://github.com/StrawberryPerl/Perl-Dist-Strawberry/releases/tag/SP_54221_64bit SP_54221_64bit]&lt;br /&gt;
| PDL edition; conventionally unpacks under &amp;lt;code&amp;gt;C:\sw\pdl&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Alien::wxWidgets&lt;br /&gt;
| 0.73&lt;br /&gt;
| [https://github.com/sciurius/perl-Alien-wxWidgets/releases/tag/R0.73 R0.73]&lt;br /&gt;
| wxWidgets discovery/configuration layer for wxPerl.&lt;br /&gt;
|-&lt;br /&gt;
| Wx / wxPerl&lt;br /&gt;
| 3.009&lt;br /&gt;
| [https://github.com/sciurius/wxPerl/releases/tag/R3.009 R3.009]&lt;br /&gt;
| Perl bindings for wxWidgets.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>104.181.193.235</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=Developing_and_Distributing_wxPerl_Applications_on_Windows&amp;diff=332</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=332"/>
		<updated>2026-07-05T06:28:51Z</updated>

		<summary type="html">&lt;p&gt;104.181.193.235: /* 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;
== Installation ==&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;
| 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;.&lt;br /&gt;
|-&lt;br /&gt;
| Previously Tested&lt;br /&gt;
| 5.40.2.1&lt;br /&gt;
| Not separately documented on this summary page&lt;br /&gt;
| 0.71&lt;br /&gt;
| 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.&lt;br /&gt;
|-&lt;br /&gt;
| Archive&lt;br /&gt;
| 5.40.0.1&lt;br /&gt;
| Not separately documented on this summary page&lt;br /&gt;
| 0.70&lt;br /&gt;
| 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.&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>104.181.193.235</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=Developing_and_Distributing_wxPerl_Applications_on_Windows&amp;diff=290</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=290"/>
		<updated>2025-08-05T15:25:06Z</updated>

		<summary type="html">&lt;p&gt;104.181.193.235: /* wxGlade - a Perl Friendly(cross-platform) GUI Builder */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Update Notes - 3/10/2025! ==&lt;br /&gt;
Updates to the information on wxPerl on Strawberry Perl 5.40.0.1 + PDL 2.089.&lt;br /&gt;
&lt;br /&gt;
Also added not on importance of using pp_autolink to find the DLLs for use with wxpar.&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This article 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 compliments 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, particularly one that is full of users who are okay with paying for software (i.e., Windows). 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-clicable EXE file!|thumb|wxPerl GUI running on Windows as a double-clicable EXE file! Created using RAD-ish tool, wxGlade. 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 it out (of course); but understand they have not been tried out and shown to work like 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 Revivial]! ===&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
=== Step 1 - Install Strawberry Perl (5.40.0.1) ===&lt;br /&gt;
Install via following link,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;https://github.com/StrawberryPerl/Perl-Dist-Strawberry/releases/download/SP_54001_64bit_UCRT/strawberry-perl-5.40.0.1-64bit.msi&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Installing Strawberry Perl (5.40.0.1) + PDL (2.089) ====&lt;br /&gt;
Note: there might be interest in providing a Windows wxPerl environment that includes the Perl Data Language. See [[Portal:SciTech|notes on creating a Perl environment using Strawberry Perl that includes PDL]]. Once this is set up, the rest of the instructions starting with Step 2 below all work the same!&lt;br /&gt;
&lt;br /&gt;
=== Step 2 - Install Alien::wxWidgets (v 0.70) ===&lt;br /&gt;
Once Perl is installed, look in the Start menu for the Perl      &amp;quot;cmd&amp;quot; window or open up PowerShell&lt;br /&gt;
&lt;br /&gt;
* go to &amp;quot;&#039;&#039;&#039;Start menu&#039;&#039;&#039;&amp;quot; &amp;gt; &#039;&#039;Strawberry Perl&#039;&#039; &amp;gt; &amp;quot;&#039;&#039;&#039;Perl (command line)&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
* click the Start menu item, it&#039;ll open up a Windows CMD window (traditional black DOS prompt)&lt;br /&gt;
&lt;br /&gt;
Type the command at the &amp;quot;C:&amp;quot; prompt,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;big&amp;gt;C:\&amp;gt; cpanm --verbose &amp;lt;nowiki&amp;gt;https://github.com/sciurius/wxPerl/releases/download/R3.004/Alien-wxWidgets-0.70.tar.gz&amp;lt;/nowiki&amp;gt;&amp;lt;/big&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 3 - Install Wx (v 3.005) ===&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;C:\&amp;gt; cpanm --verbose &amp;lt;nowiki&amp;gt;https://github.com/sciurius/wxPerl/releases/download/R3.005/Wx-3.005.tar.gz&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Verify Installation ==&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 ot 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 outputing Perl code. It is actively developed, the developer is very responsive on Github to bugs and feature requests. It is the closest thing we have in Perl to a RAD (rapid application development) environment (e.g., [https://www.lazarus-ide.org/ Lazarus] for FreePascal).&lt;br /&gt;
&lt;br /&gt;
=== Step 1 - Install Python 3.12 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;
https://github.com/wxGlade/wxGlade/archive/refs/tags/v1.1.0.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 unzip&#039;d 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;code&amp;gt;&amp;lt;big&amp;gt;pacman -S vim git&amp;lt;/big&amp;gt;&amp;lt;/code&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;
  set mouse=&lt;br /&gt;
  set noautoindent&lt;br /&gt;
  set nosmartindent&lt;br /&gt;
  set nocindent&lt;br /&gt;
&lt;br /&gt;
=== Using wxGlade&#039;s &amp;quot;Single file&amp;quot; + &amp;quot;&#039;&#039;Keep use 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 generated 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 over write 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;Seperate 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;code&amp;gt;&amp;lt;big&amp;gt;C:\&amp;gt; cpanm --verbose PAR::Package App::PP::Autolink Wx::Perl::Packager&amp;lt;/big&amp;gt;&amp;lt;/code&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;code&amp;gt;&amp;lt;big&amp;gt;C:\&amp;gt; wxpar YOURPROGRAM.pl -o YOURPROGRAM.exe&amp;lt;/big&amp;gt;&amp;lt;/code&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 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 tage 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;
 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;
Should be modified to look like the following:&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;
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/l]&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 sus out required DLLs (provides &amp;lt;code&amp;gt;pp_autolink&amp;lt;/code&amp;gt;, which helped!)&lt;br /&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 files with all the Wx DLLs&lt;br /&gt;
 # 2. installed, 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. ran the &amp;quot;wxpar&amp;quot; command above&lt;br /&gt;
 # 4. tested in a non-Strawberry Perl window (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;
 #&lt;br /&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;
=== PPL (portable Perl loader) ===&lt;br /&gt;
... to fill in (Johan?)&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;
== 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 XRX 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 asks 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 - wxidgets 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>104.181.193.235</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=Developing_and_Distributing_wxPerl_Applications_on_Windows&amp;diff=191</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=191"/>
		<updated>2025-01-25T20:26:00Z</updated>

		<summary type="html">&lt;p&gt;104.181.193.235: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
This article 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 compliments 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, particularly one that is full of users who are okay with paying for software (i.e., Windows). 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-clicable EXE file!|thumb|wxPerl GUI running on Windows as a double-clicable EXE file! Created using RAD-ish tool, wxGlade. 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 it out (of course); but understand they have not been tried out and shown to work like version combinations below.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
=== Step 1 - Install Strawberry Perl ===&lt;br /&gt;
Install via following link,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;https://github.com/StrawberryPerl/Perl-Dist-Strawberry/releases/download/SP_54001_64bit_UCRT/strawberry-perl-5.40.0.1-64bit.msi&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 2 - Install Alien::wxWidgets (v 0.70) ===&lt;br /&gt;
Once Perl is installed, look in the Start menu for the Perl      &amp;quot;cmd&amp;quot; window or open up PowerShell&lt;br /&gt;
&lt;br /&gt;
* go to &amp;quot;&#039;&#039;&#039;Start menu&#039;&#039;&#039;&amp;quot; &amp;gt; &#039;&#039;Strawberry Perl&#039;&#039; &amp;gt; &amp;quot;&#039;&#039;&#039;Perl (command line)&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
* click the Start menu item, it&#039;ll open up a Windows CMD window (traditional black DOS prompt)&lt;br /&gt;
&lt;br /&gt;
Type the command at the &amp;quot;C:&amp;quot; prompt,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;big&amp;gt;C:\&amp;gt; cpanm --verbose &amp;lt;nowiki&amp;gt;https://github.com/sciurius/wxPerl/releases/download/R3.004/Alien-wxWidgets-0.70.tar.gz&amp;lt;/nowiki&amp;gt;&amp;lt;/big&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 3 - Install Wx (v 3.005) ===&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;C:\&amp;gt; cpanm --verbose &amp;lt;nowiki&amp;gt;https://github.com/sciurius/wxPerl/releases/download/R3.005/Wx-3.005.tar.gz&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Verify Installation ==&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;
=== 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 outputing Perl code. It is actively developed, the developer is very responsive on Github to bugs and feature requests. It is the closest thing we have in Perl to a RAD (rapid application development) environment (e.g., [https://www.lazarus-ide.org/ Lazarus] for FreePascal).&lt;br /&gt;
&lt;br /&gt;
=== Step 1 - Install Python 3.12 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;
https://github.com/wxGlade/wxGlade/archive/refs/tags/v1.1.0.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 unzip&#039;d 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;
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 generated 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 over write code that is outside the bounds of very clearly marked blocks in the code&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.&lt;br /&gt;
&lt;br /&gt;
=== Step 1 - Install PAR::Package and Wx::Perl::Packager ===&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;big&amp;gt;C:\&amp;gt; cpanm --verbose PAR::Package Wx::Perl::Packager&amp;lt;/big&amp;gt;&amp;lt;/code&amp;gt;&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;code&amp;gt;&amp;lt;big&amp;gt;C:\&amp;gt; wxpar YOURPROGRAM.pl -o YOURPROGRAM.exe&amp;lt;/big&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Important Notes About wxGlade Generated Code ====&lt;br /&gt;
&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 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 tage 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;
 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;
Should be modified to look like the following:&lt;br /&gt;
 use Wx qw;&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;
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;
== 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;
&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 XRX 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 asks 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;
&#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.&lt;/div&gt;</summary>
		<author><name>104.181.193.235</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=Main_Page&amp;diff=42</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=Main_Page&amp;diff=42"/>
		<updated>2025-01-15T06:07:41Z</updated>

		<summary type="html">&lt;p&gt;104.181.193.235: &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. This space is dedicated to Perl developers who want to enhance their skills, share knowledge, and collaborate with others to build sustainable, successful careers as freelancers in the world of Perl development. As a freelancer, you face unique challenges, but the Perl Guilds wiki offers resources and a supportive community to help you overcome them. Whether you&#039;re just starting or are an experienced Perl developer, you&#039;ll find valuable information here to help you refine your craft and build a business around your Perl expertise.&lt;br /&gt;
&lt;br /&gt;
The original wiki concept was inspired by [https://wiki.freepascal.org FreePascal]&#039;s community wiki. This wiki is maintained by myself, Brett Estrade ([https://metacpan.org/author/OODLER OODLER]) &amp;lt;[mailto:brett.estrade@gmail.com brett.estrade@gmail.com]&amp;gt;; I am an idependant Perl contractor based in Houston, Texas. If you found this page looking for a contract Perl programmer, you may reach me for a quote [https://brett.acutisdate.com here].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Disclaimer:&#039;&#039;&#039; Unless otherwise noted, the opinions and forms of expression on this site are my own own. Ill conceived and disordered Perl &amp;quot;standards of conduct&amp;quot; hold no dominion over me or this site - I reject the with my whole being; I also reject the traditional &amp;quot;3 virtues of Perl&amp;quot;, rather I strive for the [https://www.youtube.com/watch?v=mEWfo9U3uTM rightly ordered virtue] originally intended by Perl&#039;s creator, Larry Wall; [[wikipedia:Seven_virtues|these]] are the things that hold sway over me and this site. If you don&#039;t like it, you do not have to be here. Similarly, if the idea of charging money to write Perl programs offends you, then you also do not need to be here (i.e., &#039;&#039;[[wikiquote:Davy_Crockett|you may go to hell and I will go to Texas]]&#039;&#039;). This site is about creating a sustainable wage-earning culture that is based on the extremely powerful Perl programming language.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left; width:49%;”&amp;gt;&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; class = &amp;quot;wikitable&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
== Perl Beginners, Hobbyist, and Dabblers ==&lt;br /&gt;
This section is for anyone interested in Perl, learning Perl, or those tinkering with Perl. The point of this section is to move you over to become a professional Perl Craftsmen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Official Website&#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;
&#039;&#039;&#039;Email Lists and Communities:&#039;&#039;&#039;&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;
&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 professions&#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 those wishing to become one. It is not for &amp;quot;Jacks of all trades;&amp;quot; this section is for Perl craftsmen - journey men and true masters wishing to leverage their skills in Perl to put food in their kids&#039; mouths and a roof over their head.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Official Website&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;(RAD), Rapid Application Development Tools, IDEs, 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 Window GUI Programs&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Cross-platform GUIs with wxPerl&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;Commerical 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 activitiy 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;
&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;
==Perl Guilds Wiki Portals==&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 together all the related information for the particular 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;
&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;
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:HardwarePortalLogo.png|link=Portal:Hardware and Robotics|[[Portal:Hardware and Robotics|Hardware and Robotics]]&lt;br /&gt;
File:HowTo.png|link=Portal:HowTo Demos|[[Portal:HowTo Demos|HowTo Demos]]&lt;br /&gt;
File:tachart getting started step6.png|link=Portal:SciTech|[[Portal:SciTech|Science and Technology]]&lt;br /&gt;
File:tdrawgrid.png|link=Portal:Web Development|[[Portal:SaaS and Web Development|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:Embedded.png|link=Portal:Embedded|[[Portal:Embedded|Embedded]]&lt;br /&gt;
File:FBSD Daemon.jpg|link=Portal:FreeBSD|[[Portal:FreeBSD|FreeBSD]]&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:Logo Windows 01.png|link=Portal:Windows|[[Portal:Windows|Windows]]&lt;br /&gt;
&amp;lt;/gallery&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 and, 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]]) with the bug report.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>104.181.193.235</name></author>
	</entry>
	<entry>
		<id>https://wiki.perl-guilds.net/index.php?title=Main_Page&amp;diff=41</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.perl-guilds.net/index.php?title=Main_Page&amp;diff=41"/>
		<updated>2025-01-15T05:59:13Z</updated>

		<summary type="html">&lt;p&gt;104.181.193.235: &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. This space is dedicated to Perl developers who want to enhance their skills, share knowledge, and collaborate with others to build sustainable, successful careers as freelancers in the world of Perl development. As a freelancer, you face unique challenges, but the Perl Guilds wiki offers resources and a supportive community to help you overcome them. Whether you&#039;re just starting or are an experienced Perl developer, you&#039;ll find valuable information here to help you refine your craft and build a business around your Perl expertise.&lt;br /&gt;
&lt;br /&gt;
The original wiki concept was inspired by [https://wiki.freepascal.org FreePascal]&#039;s community wiki. This wiki is maintained by myself, Brett Estrade ([https://metacpan.org/author/OODLER OODLER]) &amp;lt;[mailto:brett.estrade@gmail.com brett.estrade@gmail.com]&amp;gt;; I am an idependant Perl contractor based in Houston, Texas. If you found this page looking for a contract Perl programmer, you may reach me for a quote [https://brett.acutisdate.com here].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Disclaimer:&#039;&#039;&#039; Unless otherwise noted, the opinions and forms of expression on this site are my own own. Ill conceived and disordered Perl &amp;quot;standards of conduct&amp;quot; hold no dominion over me or this site - I reject the with my whole being; I also reject the traditional &amp;quot;3 virtues of Perl&amp;quot;, rather I strive for the [https://www.youtube.com/watch?v=mEWfo9U3uTM rightly ordered virtue] originally intended by Perl&#039;s creator, Larry Wall; [[wikipedia:Seven_virtues|these]] are the things that hold sway over me and this site. If you don&#039;t like it, you do not have to be here. Similarly, if the idea of charging money to write Perl programs offends you, then you also do not need to be here. This site is about creating a sustainable wage-earning culture that is based on the extremely powerful Perl programming language.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:left; width:49%;”&amp;gt;&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; class = &amp;quot;wikitable&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
== Perl Beginners, Hobbyist, and Dabblers ==&lt;br /&gt;
This section is for anyone interested in Perl, learning Perl, or those tinkering with Perl. The point of this section is to move you over to become a professional Perl Craftsmen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Official Website&#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;
&#039;&#039;&#039;Email Lists and Communities:&#039;&#039;&#039;&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;
&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 professions&#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 those wishing to become one. It is not for &amp;quot;Jacks of all trades;&amp;quot; this section is for Perl craftsmen - journey men and true masters wishing to leverage their skills in Perl to put food in their kids&#039; mouths and a roof over their head.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Official Website&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;(RAD), Rapid Application Development Tools, IDEs, 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 Window GUI Programs&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Cross-platform GUIs with wxPerl&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;Commerical 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 activitiy 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;
&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;
==Perl Guilds Wiki Portals==&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 together all the related information for the particular 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;
&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;
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:HardwarePortalLogo.png|link=Portal:Hardware and Robotics|[[Portal:Hardware and Robotics|Hardware and Robotics]]&lt;br /&gt;
File:HowTo.png|link=Portal:HowTo Demos|[[Portal:HowTo Demos|HowTo Demos]]&lt;br /&gt;
File:tachart getting started step6.png|link=Portal:SciTech|[[Portal:SciTech|Science and Technology]]&lt;br /&gt;
File:tdrawgrid.png|link=Portal:Web Development|[[Portal:SaaS and Web Development|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:Embedded.png|link=Portal:Embedded|[[Portal:Embedded|Embedded]]&lt;br /&gt;
File:FBSD Daemon.jpg|link=Portal:FreeBSD|[[Portal:FreeBSD|FreeBSD]]&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:Logo Windows 01.png|link=Portal:Windows|[[Portal:Windows|Windows]]&lt;br /&gt;
&amp;lt;/gallery&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 and, 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]]) with the bug report.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>104.181.193.235</name></author>
	</entry>
</feed>