我有以下代码:
#! /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.
来自glob
的文件:
在标量上下文中,
glob
遍历此类文件名扩展,在列表耗尽时返回undef.
换句话说,当您glob
在标量上下文中调用时,它将返回第一个扩展.对同一glob
实例的第二次调用返回第二个扩展,依此类推.返回所有扩展后,glob
返回undef
以指示此情况.
要立即获得所有扩展:
my @expansions = glob($glob);
为了获得所有扩展,一次一个:
while (defined( my $expansion = glob($glob) )) { ... }
要获得第一次扩展而忽略其余的扩展:
my ($expansion) = glob($glob);