2013-08-01 55 views
2

我一直在使用Perl:检查环境变量是否设置

if(exists $ENV{VARIABLE_NAME} && defined $ENV{VARIABLE_NAME})在几个地方我的Perl脚本。

我觉得它混乱了代码,因此将它的值赋给了一个变量。

$debug = $ENV{VARIABLE_NAME}; 

但是,现在我无法在标量值上检查exists。有没有一种方法可以检查标量值?

+0

@squiguy - 我可能错过了这个问题。我很抱歉提出类似的问题。在这种情况下,我可以删除我的问题吗?我已经得到了一些有用的回应。 – iDev

+0

如果有什么我认为它可以帮助!我编辑说*可能*,因为有时很难分辨。但无论如何,如果你解决了你的问题,那么一切都很好。干杯。 – squiguy

+0

如果不打算测试是否存在,应该指定一个默认值:'my $ debug = $ ENV {DEBUG} || 0;' – shawnhcorey

回答

12

对于标量没有exists的概念;对于散列,它会告诉您给定的键是否出现在散列中(例如,keys %ENV是否将包含它),但这对标量没有意义。

但在环境变量的特定情况下,你不需要exists测试反正:环境变量始终是字符串,所以他们从来undef除非他们没有被设置—使exists相当于defined他们。所以你可以写if(defined $ENV{'VARIABLE_NAME'})if(defined $debug)

+0

谢谢。这很有道理:) – iDev

+0

@iDev:不客气! – ruakh

5

你说的对,exists对标量变量没有意义。但是,你不能只写if(defined $ENV{VARIABLE_NAME})?如果不存在,则$ENV{VARIABLE_NAME}将返回undef