我在 perl 中有以下代码
my %Opt =
(
boards_txt => "$ENV{'ARDUINO_DIR'}/hardware/arduino/boards.txt",
);
在此您可以看到 env 变量ARDUINO_DIR
是附加的。某些用户可能没有设置此变量。如果是这种情况,那么我想硬编码一条路径。
问题:如何检查 env 变量是否已设置?
我在 perl 中有以下代码
my %Opt =
(
boards_txt => "$ENV{'ARDUINO_DIR'}/hardware/arduino/boards.txt",
);
在此您可以看到 env 变量ARDUINO_DIR
是附加的。某些用户可能没有设置此变量。如果是这种情况,那么我想硬编码一条路径。
问题:如何检查 env 变量是否已设置?
已经给出了正确的答案,但我想补充一点,您可以使用相当方便的定义或赋值运算符//=
:
my $dir = $ENV{'ARDUINO_DIR'};
$dir //= "/other/path";
或者,正如RobEarl在评论中指出的那样:
my $dir = $ENV{'ARDUINO_DIR'} // "/other/path";
这是逻辑等价的
my $dir;
if (defined $ENV{'ARDUINO_DIR'}) {
$dir = $ENV{'ARDUINO_DIR'};
} else {
$dir = "/other/path";
}
正如mob指出的那样,defined-or 运算符需要 perl v5.10。对于那些还没有升级到那个版本的人,也可以使用||
操作符:
my $dir = $ENV{'ARDUINO_DIR'} || "/other/path";
需要注意的是,这将覆盖被解释为假的值,在某些情况下可能被认为是正确的值,例如空字符串或零。但是,在这种情况下,0
空字符串或空字符串不太可能是有效路径。
您已经在使用%ENV
哈希。它包含所有环境变量,因此您可以执行以下操作:
if (defined $ENV{'ARDUINO_DIR'}) { $prefix = $ENV{'ARDUINO_DIR'} }
else { $prefix = '/path/to/arduino/dir/' }
my $path_to_txt = $prefix . 'boards.txt';
我建议您File::Spec
用于处理路径。
您可以使用以下命令检查哈希键是否存在exists
:
perl -le 'print "fnord!" if exists $ENV{"ARDUINO_DIR"}'