我有以下代码:
#! /usr/bin/perl
use strict; use warnings;
use Data::Dumper;
sub test {
my $glob = glob("test?pl");
print "glob [$glob]\n";
$glob = glob("test?pl");
print "glob [$glob]\n";
}
test();
test();
当我运行它时,我得到以下输出:
glob [test.pl]
glob [test.pl]
Use of uninitialized value $glob in concatenation (.) or string at ./test.pl line 9.
glob []
Use of uninitialized value $glob in concatenation (.) or string at ./test.pl line 11.
glob []
为什么glob
第二次调用test
函数时失败了?我使用的是Perl 5.14。
答案 0 :(得分:7)
来自glob
的{{3}}:
在标量上下文中,
glob
遍历此类文件名扩展,在列表用尽时返回undef。
换句话说,当您在标量上下文中调用glob
时,它将返回第一个扩展。对同一个glob
实例的第二次调用返回第二个扩展,依此类推。返回所有扩展后,glob
会返回undef
来表明这一点。
一次性完成所有扩展:
my @expansions = glob($glob);
一次一个地进行所有扩展:
while (defined( my $expansion = glob($glob) )) {
...
}
要获得第一次扩展而忽略其余的扩展:
my ($expansion) = glob($glob);