【发布时间】: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\" 是什么意思。也许你的意思是“声明”?还是“在范围内”?