So, at least as long as the first element of "PERL_ENV_TABLES" is "CLISYM_foo", any table(s) that follow is(are) read-only. Anything defined into the ENV hash becomes a DCL symbol (local or global depending) in the current process only. Q: Does anyone know what happens if the first element is neither CLISYM_GLOBAL or CLISYM_LOCAL?
There is no immediately *apparent* reason why the LNM$PROCESS table name could not be replaced with LNM$FILE_DEV, at least for *your* system. Given how (most) VMS users expect logical name translation to happen, I would expect it could be changed to LNM$FILE_DEV worldwide. Q: Does anyone have (very) old sources? Is the use of LNM$PROCESS perhaps simply an artifact of some much older version of the code? (...we've always done it that way...) Perhaps it made sense to do it that way back in, oh, Perl 4? ------ Jeremy Begg said: > Hi Sheldon > >>The first question is, what else is the CRTL_ENV table used for? > > Actually I've just re-checked PERL_ENV_TABLES here and it's not what I said > it was :-( The current value is (and has been for some time) ... > > "PERL_ENV_TABLES" = "CLISYM_GLOBAL" (LNM$SYSTEM_TABLE) > = "LNM$PROCESS" > > PERL_ENV_TABLES is read once, during Perl initialisation, and specifies > how > the %ENV array is to be populated. It also determines what happens if the > Perl program adds or changes an element in the %ENV array. > > "CLISYM_GLOBAL" means search the process' DCL symbols (local then global), > and because this is the first entry in the PERL_ENV_TABLES array, any changes to %ENV will be made to the corresponding DCL global symbol (and > I > assume one will be created if the original %ENV element came from a logical > name, or didn't exist). > > "CLISYM_LOCAL" is the same as "CLISYM_GLOBAL" except that changes to the > %ENV array will result in new or modified DCL local symbols (not global > symbols). > > "CRTL_ENV" (if it was present) refers to the the CRTL's internal environment > variable array, which is documented in the C RTL Reference manual (see getenv()). > > Any other value is interpreted as a logical name table name, hence "LNM$PROCESS" on my system means to search the process-specific logical > name > table. > > Regards, > > Jeremy Begg > > +---------------------------------------------------------+ > | VSM Software Services Pty. Ltd. | > | http://www.vsm.com.au/ | > | "OpenVMS Systems Management & Programming" | > |---------------------------------------------------------| > | P.O.Box 402, Walkerville, | E-Mail: [EMAIL PROTECTED] | > | South Australia 5081 | Phone: +61 8 8221 5188 | > |---------------------------| Mobile: 0414 422 947 | > | A.C.N. 068 409 156 | FAX: +61 8 8221 7199 | > +---------------------------------------------------------+ > >>-----Original Message----- >>From: Jeremy Begg [mailto:[EMAIL PROTECTED] >>Sent: Monday, February 23, 2004 11:37 PM >>To: Craig A. Berry >>Cc: Jeremy Begg; [EMAIL PROTECTED] >>Subject: RE: Using %ENV array to get system logical names > >>Hi, > >>>>Mark has provided the answer (and the cause). >>>Do tell. %ENV is definitely capable of using LNM$FILE_DEV, but whatever problem you ran into might well trip up someone else. > >>The issue was that PERL_ENV_TABLES is currently defined /SYSTEM to be CRTL_ENV,LNM$PROCESS on my server. Mark set it up that way for reasons >>which escape us both at the moment :-) I'm tempted to simply DEASSIGN the PERL_ENV_TABLES logical to fix my problem, but first I have to work >>out what this might break, > >>Regards, > >> Jeremy Begg > > >>>>>-----Original Message----- >>>>>From: Jeremy Begg [mailto:[EMAIL PROTECTED] >>>>>Sent: Monday, February 23, 2004 5:07 PM >>>>>To: [EMAIL PROTECTED] >>>>>Cc: [EMAIL PROTECTED] >>>>>Subject: Using %ENV array to get system logical names >>>>>Hi, >>>>>I'm reworking a Perl script for use with the WASD webserver and have >>>>>run into a small problem. I need the script to be able to check for >>>>>the presence of a specific logical name and use its value if it exists. If the logical name doesn't exist, the program should use a >>default value. >>>>>Unfortunately, I'm finding $ENV{name} appears to be undefined if 'name' is a logical name. It only seems to find logical names defined in the LNM$PROCESS logical name table. >>>>>What do I need to do to get $ENV{} to search all logical name tables >>>>>defined >>>> >by LNM$FILE_DEV (the usual default logical name table search list)? > > > >>>-- >>>________________________________________ >>>Craig A. Berry >>>mailto:[EMAIL PROTECTED] > >>>"... getting out of a sonnet is much more difficult than getting in." >>> Brad Leithauser > >
