glob 如何返回“文件名”?不存在的?
这个答案表明 glob 有时会返回不存在的“文件名”。
@deck = glob "{A,K,Q,J,10,9,8,7,6,5,4,3,2}{\x{2660},\x{2665},\x{2666},\x{2663}}";
但是,当我运行该代码时,它返回一个空列表。
我缺少什么?
此运行是在 Windows XP 上使用 ActiveState Perl 版本 5.005_02 从命令提示符处使用 -e 进行的。在同一台计算机上运行保存的脚本会产生相同的结果。
在 Windows XP 上使用 ActiveState Perl v5.8.7 运行 -e 确实会返回一个数组。
This answer indicates that glob can sometimes return 'filenames' that don't exist.
@deck = glob "{A,K,Q,J,10,9,8,7,6,5,4,3,2}{\x{2660},\x{2665},\x{2666},\x{2663}}";
However, that code returns an empty list when I run it.
What am I missing?
This run was from the command prompt using -e, on Windows XP, with ActiveState Perl version 5.005_02. Running from a saved script on the same machine yields the same results.
Running with -e on Windows XP, with ActiveState Perl v5.8.7, does return an array.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
Perl 版本 5.005_02 是古老(就 Perl 而言)。该版本可能有不同的
glob
实现,它不会返回不存在的文件的名称。正如您所注意到的,Perl 的更高版本的工作方式有所不同。Perl version 5.005_02 is ancient (in Perl terms). That version probably has a different implementation of
glob
that doesn't return names of files that don't exist. As you've noticed, later versions of Perl work differently.在我的机器 v5.10.0 上可以正常工作。
给出输出:
That works correctly on my machine, v5.10.0.
gives as output:
它对我来说效果很好 - 即它生成一副纸牌,我使用的是 perl 5.8.8。
但。为此使用 glob 似乎很奇怪 - 我的意思是 - 当然,这是可能的,但 glob 是一个匹配文件的工具,不能保证实际检查文件,但没有人说它不会不会以后再匹配文件!
我肯定会采用另一种方法。例如这样:
或者,如果您发现 map{map} 太神秘:
It works well for me - i.e. it generates deck of cards, I'm using perl 5.8.8.
But. Using glob for this seems to be strange - I mean - sure, it's possible, but glob is a tool to match files which is not guaranteed to actually check for the files, but nobody says that it will not match the files in the future!
I would definitely go with another approach. For example like this:
Or, if you find the map{map} too cryptic: