【问题标题】:Why do we have to localize $/ in the code? [duplicate]为什么我们必须在代码中本地化 $/? [复制]
【发布时间】:2015-05-16 21:46:13
【问题描述】:

我有这段代码,它读取一个文件,然后在另一个文件 output1.txt 的下一行中打印由空格分隔的每个字符串。我想知道的是,如果我删除 $/ ,它只需要 uart1.txt 的第一行。本地在做什么,最后文件句柄在 $data 中返回?有什么办法可以完成这项任务吗?

#!/usr/local/bin/perl

open STDOUT, ">", "output1.txt" or die "$0: open: $!";

use strict; 
use warnings;

my $data= do {
open my $fh , '<','D:\perl_learning\uart1.txt' or die $!;
 local $/;
<$fh>;
};

while($data =~ /(\S+)/g)
{
my $word=$1;
printf"%s\n",$word; 
};    

【问题讨论】:

    标签: perl


    【解决方案1】:

    $/ 是记录分隔符,用于在while 循环中一次读取文件的位。默认情况下它是“新行”。

    但是,全局更改它是一种不好的形式,因为它可能会破坏程序的其他部分。

    local 通过将更改范围限定为当前范围(实际上是“这组{}”)避免了这个问题。默认情况下 - 当您以这种方式 localize 时,它​​会将值设置为 undef。这意味着您将一口气阅读整个文件。

    所以这意味着 - 将$fh 中的所有内容读入$data,但不要在全局范围内与$/ 混淆。

    【讨论】:

    • 好的,所以 $/ 现在成为文件的本地文件,因此它可以一次性读取文件,就像默认情况下它会一次性读取该行...非常感谢!!跨度>
    • 不,它不是文件的本地文件。它是块本地的。
    • 你的意思是{}是块吗?并且在代码中的 {} 中,它只是以读取模式打开文件,因此在这种特定情况下,它必须是文件的本地...如果我错了,请纠正我!
    猜你喜欢
    • 1970-01-01
    • 2014-07-02
    • 2015-02-09
    • 1970-01-01
    • 2021-08-28
    • 1970-01-01
    • 1970-01-01
    • 2020-07-17
    • 2021-01-15
    相关资源
    最近更新 更多