根据有关文件通配符的 Perl 文档,当在标量上下文中使用 <*> 运算符或 glob() 函数时,应遍历与指定模式匹配的文件列表,每次调用时返回下一个文件名或当没有更多文件时使用undef。
但是,迭代过程似乎只能在循环中工作。如果它不在循环中,那么它似乎在读取所有值之前立即重新开始。
来自 Perl 文档:
在标量上下文中,glob 遍历此类文件名扩展,当列表用尽时返回 undef。
http://perldoc.perl.org/functions/glob.html
但是,在标量上下文中,运算符在每次调用时返回下一个值,或者在列表用完时返回 undef。
http://perldoc.perl.org/perlop.html#I/O-Operators
示例代码:
使用警告; 使用严格; 我的$文件名; # 在标量上下文中,<*> 应该返回下一个文件名 # 每次调用它或当列表用完时取消定义 $文件名 = <*>; 打印“$文件名\n”; $文件名 = <*>; # 不像记录的那样工作,重新开始 打印“$文件名\n”;# 总是返回相同的文件名 $文件名 = <*>; 打印“$文件名\n”; 打印“\n”; print "$filename\n" while $filename = <*>; # 循环工作,返回下一个文件 # 每次调用
在包含 3 个文件的目录中...file1.txt、file2.txt 和 file3.txt,上面的代码将输出:
文件1.txt 文件1.txt 文件1.txt 文件1.txt 文件2.txt 文件 3.txt
注意:实际的 perl 脚本应该在 test 目录之外,否则您也会在输出中看到脚本的文件名。
我在这里做错了什么,还是它应该如何工作?