【问题标题】:How do I access environment variables correctly in Perl?如何在 Perl 中正确访问环境变量?
【发布时间】:2011-04-19 07:19:06
【问题描述】:
$ cat flaglist.log
flag1
flag2
flag3
flag4
$

Perl 代码

my $infile = "flaglist.log";
open my $fpi, '<', $infile or die "$!";
while (<$fpi>) {
    chomp;  
    if ($ENV{$_}) {   # something wrong here
        func($_);
    }       
    else {  
        print "oops\n";
    }       
}

$ perl code.pl
oops
oops
oops
oops
$

所有四个标志都是设置的环境变量的名称(我在 shell 中使用echo $flag1 检查)。

这里的 if 条件总是返回 false。如果我写$ENV{flag1},结果为真,func() 会按我的预期调用。

我在 if 语句中做错了什么?

【问题讨论】:

  • 您的意思可能是if( exists $ENV{$_} )。如果您将环境变量设置为 0,您当前的测试将失败。

标签: perl environment-variables perl-io


【解决方案1】:

代码似乎对我有用。尝试从输入行中删除任何空格:

while (<$fpi>) {
    s/\s+//g;
    # ...
}

【讨论】:

  • @eugene,它有效,但我不明白。 chomp 不应该做这项工作吗?
  • @Lazer: 否。chomp 仅删除与$/ 中的值对应的字符串的结尾,默认情况下为\n。不会进行其他修剪。
  • @Lazer - 你确定吗?如果您在 Unix 上,请执行“cat -vet flaglist.log” - 查看“1”和“$”之间是否有空格
  • @DVK:是的,有一个空格。感谢指出,生成flaglist.log的代码有问题。
  • 还要注意 Unix 风格系统上的 DOS 风格换行符。如果您在系统之间移动文件,这很常见。
猜你喜欢
  • 2021-05-04
  • 1970-01-01
  • 1970-01-01
  • 2015-05-31
  • 1970-01-01
  • 1970-01-01
  • 2011-06-21
相关资源
最近更新 更多