我在Perl如何检查环境变量是否已设置?
my %Opt =
(
boards_txt => "$ENV{'ARDUINO_DIR'}/hardware/arduino/boards.txt",
);
下面的代码在此你可以看到环境变量ARDUINO_DIR
是追加。一些用户可能没有这个变量集。如果是这种情况,那么我想硬编码一个路径。
问题:如何检查env变量是否设置?
我在Perl如何检查环境变量是否已设置?
my %Opt =
(
boards_txt => "$ENV{'ARDUINO_DIR'}/hardware/arduino/boards.txt",
);
下面的代码在此你可以看到环境变量ARDUINO_DIR
是追加。一些用户可能没有这个变量集。如果是这种情况,那么我想硬编码一个路径。
问题:如何检查env变量是否设置?
您已经使用%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"}'
正确的答案已经给出,但我想补充一点,你可能会使用相当方便defined-or赋值运算符//=
的:
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指出,定义或操作符需要perl v5.10。对于那些谁还没升级到这个版本,也可以使用||
操作:
my $dir = $ENV{'ARDUINO_DIR'} || "/other/path";
需要说明的是,这将会覆盖被解释为假值,这在某些情况下可以考虑适当的值,如空字符串或零。但是,在这种情况下,0
或空字符串不可能是有效的路径。
...虽然我更倾向于在这种情况下使用“长度” – ikegami
是的。 “存在”是必需的,但不是一个充分的标准。该键可能存在,但其值仍未定义,在这种情况下,env var将不会被设置。 – mpe