in reply to Using Perl's open() to investigate bash login environment

I would have thought, based on documentation I read, that seeing shell metacharacters in the open string would have caused perl to automatically invoke a shell.

Yes, you are executing /bin/sh (or whatever perl -V:sh returns) to execute the shell command /usr/bin/bash -login command builtin declare -p -F.

But why? It would make more sense to execute bash directly. With the missing -c that's causing your error, we get

open( my $spawnFH, "-|", "/usr/bin/bash", "-login", "-c" => "command builtin declare -p -F", )

Also, it makes no sense to make the shell configurable when the command you execute is a bash command, so I have hardcoded it.