当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《为什么在我调用我的函数两次时glob会失败?》经验,为你挑选了1个好方法。

我有以下代码:

#! /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.



1> ikegami..:

来自glob的文件:

在标量上下文中,glob遍历此类文件名扩展,在列表耗尽时返回undef.

换句话说,当您glob在标量上下文中调用时,它将返回第一个扩展.对同一glob实例的第二次调用返回第二个扩展,依此类推.返回所有扩展后,glob返回undef以指示此情况.

要立即获得所有扩展:

my @expansions = glob($glob);

为了获得所有扩展,一次一个:

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

要获得第一次扩展而忽略其余的扩展:

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

推荐阅读
N个小灰流_701
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有