gpt4 book ai didi

linux - 局部变量遥不可及

转载 作者:太空宇宙 更新时间:2023-11-04 10:48:44 24 4
gpt4 key购买 nike

我有一个应该从系统命令读取输入的 Perl 脚本,即 service $service status 其中 $service 指向存储在数组结构中的用户输入.用户应该可以检查单个服务(例如 ssh)或同时检查多个服务(例如 ssh,named,cups,其中服务由逗号分隔) .然后程序将服务拆分成一个数组,并为每个用户指定的服务调用命令。

我的程序代码是这样的。

print "Please provide the service name that you wish to analyze (Named service):\n";

my $service_name_input = <>;
chomp($service_name_input);
my @service_list = split(/,/, $service_name_input);

foreach my $service (@service_list)
{
open(my $service_input, '-|', "service", $service, "status");
}

while (my $line = <$service_input>)
{
#Matches for "running".
if ($line =~ m/(\(running\))/)
{
print "The service $service is running.\n";
}
#Matches for "dead".
elsif ($line =~ m/(dead)/)
{
print "The service $service is dead.\n";
}
}

这里的问题是程序需要 while 语句中的 $service_input 和打印时的 $service 的显式包名称,尽管它们已经被分配了。对解决方案的任何指导将不胜感激。

最佳答案

$service_input$service 只在你的 for 循环中可见,因为你在那里定义了它。我认为您的 while 循环应该移到 for 循环中。

你必须把你的代码改成这样

for my $service ( @service_list ) {

open( my $service_input, '-|', 'service', $service, 'status' );

while ( my $line = <$service_input> ) {

if ( $line =~ /\(running\)/ ) {
print "The service $service is running.\n";
}
elsif ( $line =~ /dead/ ) {
print "The service $service is dead.\n";
}
}
}

关于linux - 局部变量遥不可及,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31963032/

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