【发布时间】:2014-10-27 17:24:47
【问题描述】:
我对我的earlier question about glob 的回答发表了以下评论:
glob() 或 die 在不在函数调用中时可以正常工作。它可以重复调用并按预期工作。所以上面的两个文件是存在的。在函数失败中第四次调用 glob 三次 (main, function, main = success)。函数内的行为不同于函数内的行为。
ysth回复:
函数没有区别,但源代码中的每个 glob 运算符都是一个单独的迭代器,因此除非以某种方式循环返回,否则您不会看到问题
在以下代码中,为什么/在哪里/如何在调用之间保存来自 glob 运算符的迭代器?为什么它没有超出范围?我知道它在做什么,但看不到它在内存中的表现。
sub in_function {
my $file = shift;
glob($file) or die ("$file file was not found\n"); #this fails second time called
}
【问题讨论】:
-
这个问题试图继续一个不存在的“线程”。 Stack Overflow 上的每个帖子都应该是独一无二的
-
始终在可重用代码的列表上下文中使用 glob,除非您确定在尝试开始新迭代之前会耗尽迭代器
-
glob 没有链接到
glob(3)?如果是这样,这取决于您对 glob 的实现。 -
@PatrickJ.S.:不,是上面的 perl 层显示了他遇到问题的迭代器
-
@Borodin 我同意,如果没有 OP 上一篇文章中的 cmets,这个问题可能会更好。简单地说“为什么/在哪里/如何在函数调用之间保存来自 glob 运算符的迭代器?”似乎是一个更好的问题。