Ake*_*ers 5 unix perl glob environment-variables
我不一定在寻找更好的方法来做到这一点,而是对输出的解释将非常感激.最近,一位资深程序员问我为什么他的代码有效,但仅限于一个实例.我发现的是它每隔一段时间都有效.这是我的例子:
#!/usr/bin/perl -w
use strict;
my @list_env_vars = (
'$SERVER',
'$SERVER',
'$SERVER',
'$SERVER',
'$SERVER',
'$SERVER',
);
foreach (@list_env_vars){
print "$_ = ".glob()."\n";
}
Run Code Online (Sandbox Code Playgroud)
perl 5.004的输出:
$SERVER = UNIX_SERVER
$SERVER =
$SERVER = UNIX_SERVER
$SERVER =
$SERVER = UNIX_SERVER
$SERVER =
Run Code Online (Sandbox Code Playgroud)
或输出perl 5.10:
$SITE = $SITE
Use of uninitialized value in concatenation (.) or string at glob_test.pl line 14.
$SITE =
$SITE = $SITE
Use of uninitialized value in concatenation (.) or string at glob_test.pl line 14.
$SITE =
$SITE = $SITE
Use of uninitialized value in concatenation (.) or string at glob_test.pl line 14.
$SITE =
Run Code Online (Sandbox Code Playgroud)
我个人从未以这种方式使用过glob(),所以我没有能力回答他.我通过perldoc glob文档阅读并按照该页面上的File :: Glob链接仍然找不到任何可以解释输出的内容.任何帮助将非常感激.
Sin*_*nür 13
glob
在标量上下文中:
在标量上下文中,glob遍历此类文件名扩展,在列表耗尽时返回undef.
在
foreach (@list_env_vars){
print "$_ = ".glob()."\n";
}
Run Code Online (Sandbox Code Playgroud)
该glob()
实乃glob($_)
.每次迭代,都$_
包含字符串$SERVER
.假定环境变量没有改变,$SERVER
则扩展为相同的字符串.第一次,返回此字符串.接下来,列表已用尽,因此undef
返回.第三次,我们重新开始....
澄清:第二次调用的参数与第一次调用的参数相同并不重要,因为无法重置glob
迭代器.
您可以使用以下示例更清楚地看到这一点(当前目录包含文件'1.a',1.b','2.a'和'2.b'):
#!/usr/bin/perl -w
use strict;
my @patterns = (
'*.a',
'*.b',
);
for my $v ( @patterns ) {
print "$v = ", scalar glob($v), "\n";
}
Run Code Online (Sandbox Code Playgroud)
输出:
C:\Temp> d *.a = 1.a *.b = 2.a
我建议通过%ENV
哈希访问环境变量:
my @list_env_vars = ($ENV{SERVER}) x 6;
Run Code Online (Sandbox Code Playgroud)
要么
my @list_env_vars = @ENV{qw(HOME TEMP SERVER)};
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1849 次 |
最近记录: |