【问题标题】:How to interpret read function in perl?如何解释 perl 中的读取函数?
【发布时间】:2022-09-30 08:53:48
【问题描述】:

这是我遇到的旧 perl 脚本的一部分。
变量$h 突然在if 内部定义,我不知道它是什么意思。

#!/usr/bin/perl

use strict;
use warnings;
use Scalar::Util qw(looks_like_number);

if (open(LIST,\"/proc/partitions\"))
{
    while (<LIST>)
    {
        my @a = split(/\\s+/); 
        print \"@a\\n\";
        if (looks_like_number($a[3]) && $a[3] > 100000000)
        {
            if (open(IN, \"/dev/$a[4]\"))
            {
                my $h;
                if (read(IN, $h, 4) == 4 && $h eq \'EFI\')
                {
                    print \"/dev/$a[4]\\n\";
                }

                close(IN);
            }
        }
    }
}

它实际上是代码的一部分。

无论如何它运行良好,但据我所知,没有任何内容保存到变量$h 并且只是定义。

looks_like_number有关系吗?

你能告诉我我想念什么吗?

  • 注意:$h 不是变量的好名字,也许$buf$fsType 更合适
  • 注意:您有机会根据当前文档使用open
  • 当您说split /\\s+/ 时,您很可能是指split \' \'。可以缩短为 split。阅读perldoc -f split 了解更多信息。
  • 当你说“突然定义”时,你的意思是你写了一些其他代码,你出于某种原因决定不向我们展示,显示$h被定义,包含undef以外的值?也许您应该详细说明该部分并显示相关代码。
  • 此外,当然$h 是在if 子句中定义的。您有一个条件$h eq \'EFI\',这意味着在 if 子句内$h 将等于字符串\"EFI\"。我怀疑你不知道 Perl 术语中的 \"defined\" 是什么意思。也许你的意思是“声明”?还是“在范围内”?

标签: perl variables


【解决方案1】:

它由read 函数写入:

读取文件句柄、标量、长度

尝试读取 LENGTH人物将数据从指定的 FILEHANDLE 转换为变量 SCALAR。返回实际读取的字符数,0 在文件末尾,如果有错误则返回 undef(在后一种情况下还设置了 $!)。 SCALAR 将增大或缩小,以便实际读取的最后一个字符是读取后标量的最后一个字符。

【讨论】:

    猜你喜欢
    • 2014-02-14
    • 1970-01-01
    • 2015-09-18
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 2017-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多