in reply to RE: not able to make defined-or operator work in my code

For %ENV the key will not exist unless there is a value defined
  • Comment on Re^2: not able to make defined-or operator work in my code

Replies are listed 'Best First'.
Re^3: not able to make defined-or operator work in my code
by lonewolf28 (Beadle) on Feb 11, 2015 at 01:46 UTC
    I did define a value.Like export hi=''. I'd expect it to be replaced by defined-or operator to 'undefined value'

      Set an environment variable, "PERL_MTYEST=''", and then run the following script:

      use feature qw/say/; say exists($ENV{PERL_MYTEST}) ? "exists" : "doesn't exist"; say defined($ENV{PERL_MYTEST}) ? "defined" : "undefined"; say length($ENV{PERL_MYTEST}) ? "non-zero length" : "zero length"; say "<<$ENV{PERL_MYTEST}>>";

      The output will be:

      exists defined zero length <<>>

      Which indicates that setting an environment variable to '' (an empty string) does not create an undefined variable, but rather, a defined variable with a value of zero length. Your assumption is just incorrect, that's all. Test for length.

      If you unset the environment variable in question, and then run the same test, you will get "doesn't exist", and "undefined".

      I suppose it's possible that your mileage will vary depending on operating system, but I don't know what OS would do it differently.


      Dave

      I did define a value.
      Yes, you did.

      You defined a value.

      That is why the value is not undefined.

      The value you defined happens to be an empty string, but an empty string is still a defined value.

        Dave, I'd appreciate you for enlightening me. Thanks. :-)