如何检查是否设置了环境变量?

Sud*_*dar 2 string perl environment-variables

我在perl中有以下代码

my %Opt = 
  (
   boards_txt => "$ENV{'ARDUINO_DIR'}/hardware/arduino/boards.txt",
  );
Run Code Online (Sandbox Code Playgroud)

在这里你可以看到env变量ARDUINO_DIR是追加的.某些用户可能没有设置此变量.如果是这种情况,那么我想硬编码路径.

问题:如何检查是否设置了env变量?

TLP*_*TLP 6

已经给出了正确的答案,但我想补充一点,您可以使用相当方便的定义或赋值运算符//=:

my $dir = $ENV{'ARDUINO_DIR'};  
$dir //= "/other/path";         
Run Code Online (Sandbox Code Playgroud)

或者,正如RobEarl在评论中指出的那样:

my $dir = $ENV{'ARDUINO_DIR'} // "/other/path"; 
Run Code Online (Sandbox Code Playgroud)

这是逻辑等价物

my $dir;
if (defined $ENV{'ARDUINO_DIR'}) { 
    $dir = $ENV{'ARDUINO_DIR'};
} else {
    $dir = "/other/path";
}
Run Code Online (Sandbox Code Playgroud)

正如mob指出的那样,定义的或运算符需要perl v5.10.对于尚未升级到该版本的用户,也可以使用||运营商:

my $dir = $ENV{'ARDUINO_DIR'} || "/other/path"; 
Run Code Online (Sandbox Code Playgroud)

需要注意的是,这将覆盖被解释为false的值,在某些情况下可能会将其视为正确的值,例如空字符串或零.但是,在这种情况下,0空字符串不太可能是有效路径.