) { print $.-6ren">
gpt4 book ai didi

perl - 在Perl中,如何将几个文件的内容 "slurp"转换为字符串?

转载 作者:行者123 更新时间:2023-12-04 03:19:40 27 4
gpt4 key购买 nike

Perl有许多方便的成语,可以轻松地完成常见的事情,包括:

  • 如果不使用文件句柄而使用文件读取运算符<HANDLE>,它将无缝地打开并读取@ARGV中的所有文件,一次仅一行:
    while (<>) { print $., $_;  }
  • 通过(本地)重置输入记录分隔符$/,我可以一次“吸取”整个文件:
    local $/; $content = <HANDLE>;

  • 但是,这两个习惯用法并没有像我预期的那样协同工作:重置 $/之后,在文件末尾停止使用 <>进行混音:以下仅提供了第一个文件的内容。
    local $/; $content = <>;

    现在,我相信这种行为一定是设计使然,但我并不在乎。将所有文件的 的所有内容提取为字符串的简洁Perl惯用语是什么? (与This相关的问题提到了一种将文件列表包含到单独的字符串中的方法,这是一个开始……但如果您以后仍需要加入字符串,则不是很优雅。)

    最佳答案

    您意识到自己只是隐藏了多个open调用,对不对?没有一种神奇的方式来读取多个文件,而不用一个个地打开所有文件

    如您所见,如果将$/设置为undef,Perl将在每个文件的末尾停止读取

    处理<>的内部机制会在打开时从@ARGV中删除每个文件名,因此我建议您只使用while循环,该循环使用<>进行读取,直到@ARGV为空为止

    看起来像这样

    use strict;
    use warnings 'all';

    my $data;
    {
    local $/;
    $data .= <> while @ARGV;
    }

    关于perl - 在Perl中,如何将几个文件的内容 "slurp"转换为字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38182433/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com