我在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