gpt4 book ai didi

perl - 在 perl 中使用 $/

转载 作者:行者123 更新时间:2023-12-04 22:22:51 24 4
gpt4 key购买 nike

很难说出这里问的是什么。这个问题是模棱两可的、模糊的、不完整的、过于宽泛的或修辞的,无法以目前的形式得到合理的回答。如需帮助澄清这个问题以便重新打开它,visit the help center .




9年前关闭。




我在 Internet 上看到了许多使用 $/ 的示例在 perl 中超过 split但我无法理解它的用途。

谁能解释一下我们如何使用$/超过 split在 Perl 中?

最佳答案

如果您使用 readline $filehandle (或 <$filehandle> )在标量上下文中,它将返回文件中未读部分的剩余部分,直到并包括 $/ 中字符串的下一次出现。 .默认情况下,这设置为换行符,因此返回文件的下一行。

my $line = <$filehandle>


while (<$filehandle>) { ... }

两者都施加标量上下文,因此变量设置为文件的下一行,并且循环在 $_ 中一次执行文件的一行。多变的。

更改 $/ 的值如果文件中的数据单元超过几行,有时会很有用。例如,如果文件包含总是以 } 结尾的 block 。在一行的末尾,你可以设置 $/ = "}\n" .然后你会得到一切,直到返回 block 的下一个结尾,可能带有嵌入的换行符。
$/ 有几个特殊值。 .使用 $/ = '' 将其设置为空字符串将使 Perl 返回所有内容,直到文件中有一个或多个空行。显然,这仅在文件中的数据被分隔为带有空行的单元时才有用。

设置 $/undef将允许读取一直持续到文件末尾。这就是将文件插入内存的意思,有时对于小文件很实用。如果绝对有必要,最好使用 local在一个小代码块的范围内,比如
my $data = do {
open my $filehandle, '<', 'file.txt' or die $!;
local $/;
<$filehandle>;
};

设置 $/对数值的引用将强制读取在特定数量的字符后停止。例如 $/ = \4096将使 readline为您从文件中获取下一个 4KB 数据(如果剩余不到 4KB,则获取文件的其余部分)。这可以用于特殊目的,例如缓存您自己的文件读取。

通过“在 Perl 中使用 $/ 而不是 split”我想你的意思是这和使用 split 之间的区别将整个文件放入一个标量变量中。主要考虑因素是内存空间。如果文件超过几 KB,那么在不完全必要的情况下一次将其全部读入 Perl 变量是非常浪费的。使用 $/while将允许一次只将一条记录读入内存、处理并在读取下一条记录时丢弃。

如果您认为您需要一个数组中的所有文件,以便您可以向后和向前看,例如,您应该考虑 Tie::File 模块将使它看起来好像整个文件都在一个数组中(甚至允许您修改它),但实际上会根据需要将数据分页进出内存。

使用 split 的优势是它需要一个正则表达式来识别拆分字符串的位置。这与 $/ 形成对比。只能设置为一个简单的字符串。如果您需要以更复杂的方式划分文件,这可能很有用。

一般来说,使用 $/连同 while是读取文件的最佳方式,并且应该是您的首选,除非有一个压倒一切的原因需要不同的东西。它将防止过度使用内存,并通过迫使您一次专注于单个数据记录来鼓励更好的编程。

关于perl - 在 perl 中使用 $/,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11708201/

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