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
  • Bill,

    If this apt.pl thing is started through auto proc, the first thing to check is the entry in the autoprocessing spec.
    Is the entry a fully specified path to the perl executable?
    If so it should normally point to /etc/xyvision/common/perl/bin/perl which is the perl delivered with the xpp system (unless somebody in your company has a very good reason to run a different version of perl - I would seriously doubt whatever reason somebody might have to do so- but that is a totally other thing)

    If the entry in the autoproc spec, just says apt.pl, then the next thing to do is to verify the magic line (the !# line)  at the top of the APT.pl script to see what 'perl' you are running.
    If should be something like

    #!/etc/xyvision/common/perl/bin/perl 


    If that is the case, the better way to check if Perl can find a certain module would be in that case:

    >/etc/xyvision/common/perl/bin/perl -Mstrict -e 

    You will get nothing back if the module can be loaded successfully. And an overview of the content of @INC if things go wrong.

    Also check that the /etc/xyvision/common/perl is still linked to the xpp delivered version of perl

    But from the error messages you are getting back either the autoproc entry is using the 'wrong' version of perl (remember that a linux system might come with loads of different perl installations) or the magic line on apt.pl is either missing or pointing to the wrong perl installation.

Reply
  • Bill,

    If this apt.pl thing is started through auto proc, the first thing to check is the entry in the autoprocessing spec.
    Is the entry a fully specified path to the perl executable?
    If so it should normally point to /etc/xyvision/common/perl/bin/perl which is the perl delivered with the xpp system (unless somebody in your company has a very good reason to run a different version of perl - I would seriously doubt whatever reason somebody might have to do so- but that is a totally other thing)

    If the entry in the autoproc spec, just says apt.pl, then the next thing to do is to verify the magic line (the !# line)  at the top of the APT.pl script to see what 'perl' you are running.
    If should be something like

    #!/etc/xyvision/common/perl/bin/perl 


    If that is the case, the better way to check if Perl can find a certain module would be in that case:

    >/etc/xyvision/common/perl/bin/perl -Mstrict -e 

    You will get nothing back if the module can be loaded successfully. And an overview of the content of @INC if things go wrong.

    Also check that the /etc/xyvision/common/perl is still linked to the xpp delivered version of perl

    But from the error messages you are getting back either the autoproc entry is using the 'wrong' version of perl (remember that a linux system might come with loads of different perl installations) or the magic line on apt.pl is either missing or pointing to the wrong perl installation.

Children