Upgraded XPP from 9.2.2 to 9.4.0 and now a perl program can not find strict.pm

We upgraded our XPP from 9.2.2 to 9.4.0 and a perl program that has been working for at least the last 7 years is complaining about finding strict.pm.

The program works if I compile it and run it with the XPP perl.

But when background process runs it - there is an error

Can't locate strict.pm:   /root/perl5/lib/perl5/warnings.pm: Permission denied at /opt/xyvision/xz/procs/site/APT.pl line 105.

Can't locate warnings.pm:   /root/perl5/lib/perl5/warnings.pm: Permission denied at /opt/xyvision/xz/procs/site/APT.pl line 106.

Is there something wrong with our global variables?

Is there something wrong with our @INC for XPP.

I do see the PM files in XPP perl....

find /opt/xyvision/xz/etcxyvision -name "strict.pm"
/opt/xyvision/xz/etcxyvision/common/perl/lib/5.28.1/strict.pm

find /opt/xyvision/xz/etcxyvision -name "warnings.pm"
/opt/xyvision/xz/etcxyvision/common/perl/lib/5.28.1/encoding/warnings.pm
/opt/xyvision/xz/etcxyvision/common/perl/lib/5.28.1/warnings.pm

Parents
  • Off topic, but there were a couple of interesting "gotchas" in our upgrade earlier this year (8.4 to 9.4, but more importantly Perl 5.10 to 5.28).

    1. "if (defined @array) ..." no longer compiles. Apparently, scalars can be undefined, but arrays, not so much. "my $var;" is undefined. But, "my @array;" is apparently the same as "my @array = ();" At least that's my own understanding. "Once mentioned, arrays are defined." So we had a lot of these, including in professional services provided source code, so they all had to be changed to "if (@array) ..." (i.e. implicit "if (scalar @array)..."

    2. @INC no longer contains "." (the current directory), due to security concerns. I think that changed in Perl 5.26? This showed up a few times for some programmers who liked to write their own one-off Perl packages and put them in the cwd for simplicity's sake.

  • Jay,

    I think point 2 was mentioned in the SDL-RWS- XPP upgrade doc as something to look out for.

    As for point 1 here is what the official perl doc has to say about the 'defined @array' thing:

    Use of defined on aggregates (hashes and arrays) is no longer supported.
    It used to report whether memory for that aggregate had ever been allocated.
    You should instead use a simple test for size:

    if (@an_array) { print "has array elements\n" }
    if (%a_hash)   { print "has hash members\n"   }

    I think that it was never very clear and open for discussion what a defined array or hash really meant...

Reply Children