2

私はperlで次のコードを持っています

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

ARDUINO_DIRこれで、env 変数が追加されていることがわかります。一部のユーザーは、この変数を設定していない可能性があります。その場合は、パスをハードコードしたいと思います。

質問: env 変数が設定されているかどうかを確認するにはどうすればよいですか?

4

3 に答える 3

6

正しい答えが与えられましたが、かなり便利な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が指摘するように、define-or 演算子には perl v5.10 が必要です。まだそのバージョンにアップグレードしていない場合は、||オペレーターを使用することもできます。

my $dir = $ENV{'ARDUINO_DIR'} || "/other/path"; 

これにより、false として解釈される値が上書きされることに注意してください。これは、空の文字列やゼロなど、一部のコンテキストでは適切な値と見なされる場合があります。ただし、この場合、0または空の文字列が有効なパスである可能性は低いです。

于 2012-12-17T13:18:50.730 に答える
3

すでに%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パスの操作に使用することをお勧めします。

于 2012-12-17T10:56:47.787 に答える
2

次のコマンドでハッシュキーの存在を確認できますexists

perl -le 'print "fnord!" if exists $ENV{"ARDUINO_DIR"}'
于 2012-12-17T10:56:19.737 に答える