为什么 Perl 文件 glob() 不能在标量上下文中的循环之外工作?

2024-01-04

根据有关文件通配的 Perl 文档, 运算符或 glob() 函数在标量上下文中使用时,应迭代与指定模式匹配的文件列表,每次调用时返回下一个文件名或undef 当没有更多文件时。

但是,迭代过程似乎只能在循环内进行。如果它不在循环中,那么它似乎在读取所有值之前立即重新开始。

来自 Perl 文档:

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

http://perldoc.perl.org/functions/glob.htmlhttp://perldoc.perl.org/functions/glob.html http://perldoc.perl.org/functions/glob.html

However, in scalar context the operator returns the next value each time it's called, or undef when the list has run out.

这是一种捕捉魔法的方法<>glob 运算符的状态转换为一个对象,您可以以正常的方式操作它:匿名子(和/或闭包)!

sub all_files {
    return sub { scalar <*> };
}

my $iter = all_files();
print $iter->(), "\n";
print $iter->(), "\n";
print $iter->(), "\n";

也许:

sub dir_iterator {
    my $dir = shift;
    return sub { scalar glob("$dir/*") };
}
my $iter = dir_iterator("/etc");
print $iter->(), "\n";
print $iter->(), "\n";
print $iter->(), "\n";

然后我又倾向于将其归档在“好奇心”下。忽略这个特殊的奇怪之处glob() / <>并使用opendir/readdir, IO::All http://search.cpan.org/perldoc/IO::All/readdir, or 文件::全局 http://search.cpan.org/perldoc/File::Glob反而 :)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 Perl 文件 glob() 不能在标量上下文中的循环之外工作? 的相关文章

随机推荐

  • 从生成的 Protocol Buffer 类继承

    Protocol Buffer 文档警告 您永远不应该通过继承向生成的类添加行为 从他们 这会破坏内部机制并且不好 无论如何 面向对象的实践 source 协议缓冲区基础知识 https developers google com prot
  • Google Play 服务以编程方式设置应用 ID

    我知道你可以通过AndroidManifest设置com google android gms games APP ID 但是有没有办法通过某些生成器或类似的东西以编程方式设置它 None
  • 更改南迁目录

    如何更改 South 查找应用程序迁移的位置 默认情况下 South 假定应用程序的迁移位于 migrations 中 但是 我已经迁移了安装在 usr local lib python 2 6 dist packages 的第三方包的模型
  • VHDL - PhysDesignRules:367

    当我尝试从 VHDL 代码合成 实现和生成程序文件时 我收到警告 当我尝试合成时出现此错误 WARNING Xst 647 Input
  • 如何将 pyspark 数据框列拆分为两列(下面的示例)?

    该列在单行中多次使用分隔符 因此split并不那么简单 分裂后 只有第一个分隔符在这种情况下必须考虑发生的情况 截至目前 我正在这样做 不过 我觉得可以有更好的解决方案 testdf spark createDataFrame Dog me
  • 如何在android中处理搜索视图的后退按钮

    SearchView searchView SearchView MenuItemCompat getActionView menu findItem Menus SEARCH searchView setQueryHint this ge
  • 由信用卡资助的 Paypal 账户 = 10417 错误

    我来这里是为了尝试解决贝宝中没有人可以帮助我们的黑洞 我们有一个企业帐户 Paypal Express 数字商品 已验证 限制解除等 我们将贝宝快递集成罚款作为我们唯一的付款方式 但有一个问题 任何由信用卡资助的 Paypal 帐户都会完全
  • YUI - 获取真实的元素宽度?

    我正在使用 YUI 需要获取元素的真实宽度 元素的宽度可以如下确定 宽度 左边框 右边框 左内边距 右内边距 左外边距 右外边距 以下是我的想法 它似乎正在发挥作用 我只是想知道这是否是确定此问题的最佳方法 或者是否有更有效的方法 YUI
  • 使用 JSch sudo 示例和 Channel.setPty 在远程主机上运行 sudo 命令

    我在以下链接中使用了 JSch Sudo 示例 http www jcraft com jsch examples Sudo java html http www jcraft com jsch examples Sudo java htm
  • Qt Creator 自定义构建步骤无法复制文件

    我想将文件复制到 Qt Creator 自定义构建步骤中构建 dist 目录 But after I Build the error thrown Could not start process copy C Users W Desktop
  • python中高效统计词频

    我想计算文本文件中所有单词的频率 gt gt gt countInFile test txt 应该返回 aaa 1 bbb 2 ccc 1 如果目标文本文件如下 test txt aaa bbb ccc bbb 我已经用纯 python 实
  • 如何在JUnit 5的“@BeforeEach”方法中打印“要执行”的@Test方法的名称?

    我知道我们可以在 JUnit 4 中使用 Rule and TestName但是我正在使用 JUnit 5 Jupiter 并且正在努力寻找一种方法来打印测试方法 要执行的 名称 BeforeEach method 声明一个TestInfo
  • 寻找使用 git-format-patch 和 git am 的工作流程示例

    我正在考虑让我的学生使用 git 进行结对编程 由于学生的工作必须保密 因此不可能公开回购 相反 每个学生都会有一个他们自己维护的私人存储库 并且他们需要使用 git format patch 交换补丁 我已经阅读了手册页 但我有点不清楚w
  • 导入错误:没有名为 virtualenv 的模块

    我在 windows7 上使用 Django 1 3 7 和 python 2 7 6 当我在这行代码中执行manage py时出现错误 import shutil sys virtualenv subprocess amd 运行它 我收到
  • 我如何引用values.yaml中的命名空间?

    我希望能够引用当前的命名空间values yaml使用它来为某些值添加后缀 如下所示 in values yaml someParam someval Release Namespace 以这种方式定义它比进入我的所有模板并添加要好得多 R
  • Jquery mobile t.split 不是一个函数

    我正在开发一个网站 该网站从数据库动态获取内容并将其放入 HTML 代码中 该代码应由 JQuery Mobile 页面组成 这样我可以单击链接 它将滑动到相应的页面 我正在运行 JQuery 1 9 1 和 JQuery Mobile 1
  • 使用 SQSH 对名称中包含空格的表进行 SELECT 查询

    我在 Ubuntu 10 04 上使用 SQSH 版本 2 1 通过如下命令连接到 MSSQL 数据库 sqsh S server U user P password D database 我有一个名为 我的表 的表 但我找不到对其运行 S
  • 在 MVC 4.0 中实现动态操作的路由

    是否可以在 MVC 中定义一个路由 根据部分路由动态解析操作 public class PersonalController public ActionResult FriendGroup code public ActionResult
  • C++ 中具有双缓冲区的单生产者、单消费者数据结构

    我在 work 有一个应用程序 我必须在以不同频率调度的两个实时线程之间移动 实际的调度超出了我的控制范围 应用程序是硬实时的 其中一个线程必须驱动硬件接口 因此线程之间的数据传输应该是无锁和无等待的可能的程度 需要注意的是 只需要传输一个
  • 为什么 Perl 文件 glob() 不能在标量上下文中的循环之外工作?

    根据有关文件通配的 Perl 文档 运算符或 glob 函数在标量上下文中使用时 应迭代与指定模式匹配的文件列表 每次调用时返回下一个文件名或undef 当没有更多文件时 但是 迭代过程似乎只能在循环内进行 如果它不在循环中 那么它似乎在读