为什么当我调用我的函数两次时 glob 会失败?

Why does glob fail when I call my function twice?

我有以下代码:

#! /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 []

为什么我第二次调用 test 函数时 glob 失败了?我正在使用 Perl 5.14。

来自globdocumentation

In scalar context, glob iterates through such filename expansions, returning undef when the list is exhausted.

换句话说,当你调用glob是在标量上下文中时,它returns先展开。第二次调用相同的 glob 实例 returns 第二次扩展,依此类推。当所有扩展都已返回时,glob returns undef 表示这一点。

一次获取所有扩展:

my @expansions = glob($glob);

要获取所有扩展,一次一个:

while (defined( my $expansion = glob($glob) )) {
   ...
}

要获得第一个扩展并忽略其余部分:

my ($expansion) = glob($glob);