berrybrew, the Perlbrew for Windows 1.30 released

Merry Christmas fellow Perlers!

I have been working tirelessly on the newest version of berrybrew, and thought there's no better day to release it.

It brings significant new features:

New Features

  • Added a UI, runs out of the System Tray, allows installing, removing and switching Perls using a button
  • Added new associate command, allowing berrybrew to manage .pl file associations
  • Added berrybrew-refresh command, to be run after switching perls. No more having to re-open command line windows
  • If a newer point release of a major version is introduced, we now seamlessly integrate installed previous point-releases into the Perls available
  • Configuration options are now based in the Windows Registry
  • Added new options command, allows changing configuration options at runtime
  • We now supply a bb command, which is simply a short-hand form for berrybrew
  • Greatly enhanced the self-extracting installer
  • Much more precise handling of the PATH environment variable
  • More graceful handling of exceptions
  • Added info command which displays various internal directory path information
  • Added new hidden/developer commands

UI

The UI is automatically installed by the installer. It starts and resides hidden in the System Tray until it is needed. Simply click the berrybrewUI icon to bring up a Windows Form window. You can install, remove and switch between Perl instances.

When switching Perls using the UI, if you have open CLI windows, you still need to run berrybrew-refresh or open a new CLI window to refresh the path information.

To exit the berrybrewUI, right-click on the System Tray icon, and click Exit.

Installer

There are several enhancements to the installer:

  • We properly check for existing installations, and ask confirmation questions on the actions, depending on information about the previous install. In some cases, we'll ask to do a direct upgrade, in others, we'll ask if we can simply disable the old version before installing the new. See caveats below.

  • We now ask for the directory location of the Perl instance directory (internally referred to as root_dir). If you specify a location that a previous berrybrew used, we'll merrily inherit all of the previously installed Perls.

  • Uninstall is available through Add/Remove programs

  • UI provides select-able options to 1) install the most recent version of Perl, 2) start the UI at system startup, 3) allow berrybrew to manage .pl file association

Caveats: If you have a previous version of berrybrew where you've changed any of the default configuration variables in the config.json file, you will have to manually update these options after install of the new version. Simply run berrybrew options on the new version to see what values are set. Then, open up your previous berrybrew's config.json file, and for each difference, simply run berrybrew options directive value where directive is the name of the option, and value is the value from the old config file. This will be automated in a future release.

File Association

You can now allow berrybrew to manage the .pl file association. We implement this in a similar way to Unix, in which when we're managing this association, the system will use the first perl found in the PATH environment variable.

  • Check current file association with berrybrew associate
  • Allow us to manage the association: berrybrew associate set
  • Revert back to the previous association: berrybrew associate unset

Development Information

  • Broke out the dev build script into three: build_api.bat, build_binary.bat and build_ui.bat. Left in place the build.bat script, which performs all three actions
  • The dev and test builds automatically create and use their own respective registry locations (HKLM\Software\berrybrew-build and HKLM\Software\berrybrew-test)

Desire for Perl wrapper of Mozilla's IoT platform

I've spent more than four years working on Raspberry Pi stuff for Perl, and although it's only garnered a relatively small but thorough interest, it's been a wonderful one to be a part of.

Mozilla has opened up a new IoT Platform, and I'm wondering if it'd be worth the time to provide a Perl interface to it or not.

Thoughts?

berrybrew, the Perlbrew for Windows v1.26 released

I've finally found some time to get some wanted and needed changes implemented into berrybrew.

Some changes were for development and testing of the software itself, a couple of features were added due to community requests, and yet more were requested by a client.

Here's a summary of the new features:

  • Management of external Perl installations; Using the new berrybrew virtual command, one can bring in other installations of Perl for management under berrybrew. For example, if you have an ActiveState Perl installed on the system, you can virtualize it under berrybrew, and use or switch to it just like any of the portable Strawberry Perl's we normally manage. This means that you can switch over to your system Perl when needed, without having to modify PATH, or temporarily disabling berrybrew

  • Unattended installations are now possible. We no longer prompt for user acceptance when running the initial configuration

  • New quick argument to berrybrew switch; This allows you to switch to a different Perl instance persistently without having to close the existing CLI window and opening a new one (note: some binaries and features may not work correctly. If you run into problems, simply open a new window)

  • Export and import modules from one Perl instance to another; berrybrew modules export and berrybrew modules import will dump a list of all installed CPAN distribution names from one Perl and install it on others. The export files can be edited at will before re-importing, and you can even create your own module list files to use as you see fit. Using this feature, in conjunction with berrybrew clone allows you to easily set up template Perl instances for very quick Perl platform setup

  • Ability to change the location where File::HomeDir points to; you can switch between the Windows home directory location, or the default location that Strawberry Portable editions set

Here's an example of the new berrybrew virtual feature:

Configure an external Perl as a berrybrew-managed Perl ("active-state" is just a name you desire that'll show up in berrybrew list and berrybrew available):

> berrybrew virtual active-state

    Specify the path to the perl binary: c:\perl64\bin

    Specify the library path: c:\perl64\site\bin

    Specify an additional path:


    Successfully registered virtual perl active-state

Check that it took:

> berrybrew list

    5.16.3_64 *
    5.10.1_32 
    bb-as-test 
    active-state

> berrybrew available

    ... snip for brevity

    5.16.3_64       [installed] *
    5.16.3_32
    5.14.4_64
    5.14.4_32
    5.12.3_64
    5.12.3_32
    5.10.1_32       [installed]
    5.8.9_32
    bb-as-test      [installed] [custom]
    active-state    [installed] [virtual]

Verify we're still using the previous Perl:

> perl -v

    This is perl 5, version 16, subversion 3 (v5.16.3) built for MSWin32-x64-multi-thread

Use the new one:

> berrybrew use active-state

    perl-active-state
    ==============
    Microsoft Windows [Version 10.0.17763.107]
    (c) 2018 Microsoft Corporation. All rights reserved.


    <berrybrew use active-state>: run "exit" leave this environment

Verify we're using the system's ActiveState Perl:

> perl -v

    This is perl 5, version 26, subversion 3 (v5.26.3) built for MSWin32-x64-multi-thread
    (with 2 registered patches, see perl -V for more detail)

    Copyright 1987-2018, Larry Wall

    Binary build 0000 [fde9aa8a] provided by ActiveState http://www.ActiveState.com
    Built Jul 31 2019 01:43:08

Once the new sub-shell is closed, confirm everything is sane:

> exit

    Exiting <berrybrew use active-state>

> perl -v

    This is perl 5, version 16, subversion 3 (v5.16.3) built for MSWin32-x64-multi-thread

It doesn't need to be ActiveState Perl. Any external Perl installed on the system can be used. All we need is a path to the perl.exe binary, and any library paths (if available).

berrybrew 1.23 released!

It's been quite a while in the making, but berrybrew version 1.23 now has the ability to "clone" modules from one Perl instance into another.

It's currently a two-step process.

First, berrybrew switch into the Perl instance you want to export the module list from, then...

berrybrew modules export

This will create a text document in a newly created modules directory within your Perl installation directory (by default, C:\berrybrew), named after the version of Perl you exported the module list from (eg: 5.20.3_64). This file has a single distribution name per line.

You can go ahead and edit this file (remove or add as many distribution names as you like), then when you're ready to import into a different Perl instance, simply berrybrew switch to it (note that as always, when switching Perls, you must close the command window and open a new one), then:

berrybrew modules import

That will display a list of all available export lists:

run the command with one of the following options:

5.16.3_64
5.20.3_64

...simply do what it says there:

berrybrew modules import 5.20.3_64

This can take a very, very long time, so it's advised to only import on a Perl instance that's newer than Perl you exported from. That, or significantly clean the file up for unneeded distributions.

Another benefit to this system, is that you can manually create a module "bundle" file within the mentioned "modules" directory, and add all distributions you prefer on all of your Perls. So:

  • create a C:\berrybrew\modules\base_modules_template file
  • add in any distributions you want to automatically and easily install
  • switch to the Perl instance you want to install into (or just make this habit for each new install you perform)
  • run berrybrew modules import base_modules_template to have your custom distribution list installed automatically

You can remove all exported files by using the berrybrew clean modules command, but beware that if you have any manually created export files per above, they will be removed as well. I've got an issue open for the next release so that clean modules leaves any custom files in place.

Most of the other changes were quite minor this round, mainly back-end stuff, doc updates/fixes and test additions/modifications, along with an updated perls.json file with the newly released 5.30 version.

Feedback, as always, is welcome (as are any bug tickets).

Enjoy!

-stevieb

Programming the Raspberry Pi with Perl: eBook Released!

It's finally here! Our Programming the Raspberry Pi eBook has been released!

You can learn more about it and purchase it here on Leanpub.

As one person mentioned to me "Finally, a release from the shackles of Raspbian and Python!".

Timm and I want to thank all of the financial contributors who got this project off the ground!