O
Owen_Townsend
How can I make env-vars set in package subrtns effective on return to
perl script ?
I have included testenv1.pl & testexport1.pm below
testenv1.pl calls subrtn exportfile in testexport1.pm to set env-var
LOGICALfilename=PhysicalFileName
- this works for Micro Focus COBOL programs with 'external' on the
select assign statements
- BUT why does it not work for $symbols referenced in the perl script ?
- I specify 'use Env;' which should make env-vars available to perl
script ?
- which works for symbols such as $HOME already set,
- but does not seem to work for $SYMBOLs set in the subrtn
- makes no sense if COBOL can get it (via getenv I assume) why not the
perl script ?
#!/usr/bin/perl
# testenv1 - perl script to test 'use Env'
# - why efective only for symbols already in env
# - why NOT for symbols added to env by script ???
use Env; use testexport1;
print("HOME=$HOME\n"); #<-- 'use Env' works for symbols already defined
exportfile("SORTIN","ar/sales.items"); #<-- subrtn adds SORTIN to env
#=====================================
# - exportfile subrtn adds $SYMBOLS to the environment
# - effective for COBOL which gets symbol defs from environment
# cobrun program <-- my COBOL programs do see $SYMBOLs set in
exportfile subrtn
#===========
# - BUT why are these $SYMBOLS not seen by perl script ? (via 'use
Env;') ?
print("DEBUG1: SORTIN=$SORTIN\n"); #<-- $SORTIN is still null ?
$SORTIN = $ENV{SORTIN}; #<-- redefine here (already done in subrtn)
print("DEBUG2: SORTIN=$SORTIN\n"); #<-- now we see it
exit(0);
#
#-----------------------------------------------------------------------
# testexport1.pm - perl subrtns to support perl scripts converted from
MVS JCL
# - see doc at: www.uvsoftware.ca/mvs2unix.htm
# - export files for Micro Focus COBOL
# - export LOGICAL-filename $SYMBOLS with
physical-filenames
#
# profile should include following so perl modules will be found
# export PERL5LIB=$UV/perlm:$PERL5LIB # perl modules 'use'd by perl
scripts
# ===================================
#
package testexport1;
use Env; Exporter;
our (@Export, @ISA);
@ISA = qw(Exporter);
@EXPORT = qw(exportfile);
#
# exportfile CUSTMAS ap/customer.master #<-- JCL/script call
# =====================================
# export CUSTMAS=ap/customer.master #<-- result
# =================================
#Note - main reason for using this function (vs coding export directly)
# is to display the DDname & DSNname on the console log
#
sub exportfile
{
$lfd=$_[0]; $lbl=$_[1]; # capture args into named variables
#
if ( "$lfd" && "$lbl" ) { ; }
else { print("exportfile requires 2 args: DDNname=$lfd,
DSName=$lbl\n");
exit(81);
}
#
$ENV{$lfd} = "$lbl"; # export LogicalName = PhysicalName
#=================== # COBOL programs need LFD in environment
#
# display lfd & lbl with filesize
$fsize = (-s "$RUNDATA/$lbl");
$fmsg = sprintf("file: %s=%s bytes=%d",$lfd,$lbl,$fsize);
print("$fmsg\n");
return(0);
}
perl script ?
I have included testenv1.pl & testexport1.pm below
testenv1.pl calls subrtn exportfile in testexport1.pm to set env-var
LOGICALfilename=PhysicalFileName
- this works for Micro Focus COBOL programs with 'external' on the
select assign statements
- BUT why does it not work for $symbols referenced in the perl script ?
- I specify 'use Env;' which should make env-vars available to perl
script ?
- which works for symbols such as $HOME already set,
- but does not seem to work for $SYMBOLs set in the subrtn
- makes no sense if COBOL can get it (via getenv I assume) why not the
perl script ?
#!/usr/bin/perl
# testenv1 - perl script to test 'use Env'
# - why efective only for symbols already in env
# - why NOT for symbols added to env by script ???
use Env; use testexport1;
print("HOME=$HOME\n"); #<-- 'use Env' works for symbols already defined
exportfile("SORTIN","ar/sales.items"); #<-- subrtn adds SORTIN to env
#=====================================
# - exportfile subrtn adds $SYMBOLS to the environment
# - effective for COBOL which gets symbol defs from environment
# cobrun program <-- my COBOL programs do see $SYMBOLs set in
exportfile subrtn
#===========
# - BUT why are these $SYMBOLS not seen by perl script ? (via 'use
Env;') ?
print("DEBUG1: SORTIN=$SORTIN\n"); #<-- $SORTIN is still null ?
$SORTIN = $ENV{SORTIN}; #<-- redefine here (already done in subrtn)
print("DEBUG2: SORTIN=$SORTIN\n"); #<-- now we see it
exit(0);
#
#-----------------------------------------------------------------------
# testexport1.pm - perl subrtns to support perl scripts converted from
MVS JCL
# - see doc at: www.uvsoftware.ca/mvs2unix.htm
# - export files for Micro Focus COBOL
# - export LOGICAL-filename $SYMBOLS with
physical-filenames
#
# profile should include following so perl modules will be found
# export PERL5LIB=$UV/perlm:$PERL5LIB # perl modules 'use'd by perl
scripts
# ===================================
#
package testexport1;
use Env; Exporter;
our (@Export, @ISA);
@ISA = qw(Exporter);
@EXPORT = qw(exportfile);
#
# exportfile CUSTMAS ap/customer.master #<-- JCL/script call
# =====================================
# export CUSTMAS=ap/customer.master #<-- result
# =================================
#Note - main reason for using this function (vs coding export directly)
# is to display the DDname & DSNname on the console log
#
sub exportfile
{
$lfd=$_[0]; $lbl=$_[1]; # capture args into named variables
#
if ( "$lfd" && "$lbl" ) { ; }
else { print("exportfile requires 2 args: DDNname=$lfd,
DSName=$lbl\n");
exit(81);
}
#
$ENV{$lfd} = "$lbl"; # export LogicalName = PhysicalName
#=================== # COBOL programs need LFD in environment
#
# display lfd & lbl with filesize
$fsize = (-s "$RUNDATA/$lbl");
$fmsg = sprintf("file: %s=%s bytes=%d",$lfd,$lbl,$fsize);
print("$fmsg\n");
return(0);
}