gpt4 book ai didi

perl - 在 foreach 循环中使用未初始化的值

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

我的代码片段:

my $daemon = Proc::Daemon->new;
Proc::Daemon::Init(
{ work_dir => '/home/olex/develop',
child_STDOUT => '/home/olex/develop/output.file',
child_STDERR => '+>>debug.txt'
}
);
if ( Proc::PID::File->running() ) {
print "Already running\n";
exit 0;
}
my @kids = ( 1 .. 4 );
my @childs;
my $kid_pid;
foreach $kid_pid (@kids) {
$kid_pid = $daemon->Init(
{ work_dir => '/home/olex/develop',
pid_file => "kid_pid.pid",
exec_command => 'perl /home/olex/develop/remote_imapd.pl',
}
);
$childs[$kid_pid] = $daemon->Status($kid_pid);
}
print @childs, "\n";
my $string = join( ',', @childs );
print $string;

数组 @childs 的一个元素在 STDERR 中未初始化,但打印结果正常! join 后的结果约为 ,,......,,2450,,2452,,2454,,2456。为什么这样?我明白循环中的问题,但我似乎做的一切都是正确的。我需要像 2450,2452,2454,2456 这样的字符串。

最佳答案

据我从您的代码和错误的模糊描述中可以看出,您的问题是数组中的一个未初始化元素。这意味着您的错误是:

Use of uninitialized value within @childs in join or string

您应该始终准确地复制/粘贴错误。永远不要做任何其他事情,因为那是浪费时间。

如果您使用核心模块 Data::Dumper 打印数组,例如:

use Data::Dumper;
...
print Dumper \@childs;

我怀疑您会得到以下输出:

$VAR1 = [
undef,
2050,
2051,
2052,
2053
];

你可以清楚地看到元素 0 是 undef。这来自于使用

my @kids = (1..4);
...
foreach $kid_pid (@kids) {
...
$childs[$kid_pid] = $daemon->Status($kid_pid);
}

其中数组初始化索引 1 到 4,但不是第一个元素编号零 0。在 Perl 中,数组索引从 0 开始,而不是 1

为避免此类问题,请不要直接分配给数组索引,而是使用push:

push @childs, $daemon->Status($kid_pid);

当然,除非您需要索引。

关于perl - 在 foreach 循环中使用未初始化的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26526691/

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