Your question about exporting variables from the BEGIN block does not make sense. BEGIN blocks are simply subroutines that are called at compile time. Other than that, they behave just like any other subroutine.
Variables are exported from packages, not from subroutines.
BEGIN
{
use vars qw($Bgn);
$Bgn=1 unless $ENV{'SM'};
push @INC,$ENV{'SM'}||""."/../bin";
};
use strict;
die "[Error] Environmental string not found: \$SM\n" if $Bgn;
require 'errors.pm';
...
...
To avoid getting the ugly Error-message when die-ing in the
BEGIN-block I wanted to set some variable which I would use
after the BEGIN-block to check whether there was an error.
In this case the error would have been the fact that the $SM
environment string hadn't been set. Which would result in
an error message in the BEGIN-block Use of uninitialized value in concatenation (.) at ./test.s line 19
(Which was solved by the '||""'). And which would result in
an error message due to the require 'errors.pm';
Which could not be found in $SM/../bin/, because $SM hadn't
been set.