gpt4 book ai didi

arrays - 在使用严格引用时不能将字符串用作 ARRAY 引用

转载 作者:行者123 更新时间:2023-12-04 14:17:47 25 4
gpt4 key购买 nike

当我尝试转储多维哈希数组的一部分时出现错误。 Perl吐出来

在 ./myscript.pl 使用“strict refs”时不能使用字符串(“somedata”)作为 ARRAY ref

我尝试了多种方法来访问我想查看的部分数组,但我总是遇到错误。我已经使用 Dumper 查看了整个阵列,它看起来不错。

#!/usr/bin/perl

use strict;
use warnings;

use Data::Dumper qw(Dumper);
use String::Util qw(trim);

my %arrHosts;

open(my $filehdl, "<textfile.txt") || die "Cannot open or find file textfile.txt: $!\n";

while( my $strInputline = <$filehdl> ) {
chomp($strInputline);
my ($strHostname,$strOS,$strVer,$strEnv) = split(/:/, $strInputline);
$strOS = lc($strOS);
$strVer = trim($strVer);
$strEnv = trim($strEnv);
$strOS = trim($strOS);
$arrHosts{$strOS}{$strVer}{$strEnv} = $strHostname;
}

# If you want to see the entire database, remove the # in front of Dumper
print Dumper \%arrHosts;

foreach my $machine (@{$arrHosts{solaris}{10}{DEV}}) {
print "$machine\n";
}

close($filehdl);

数据在表格中机器:操作系统:操作系统版本:环境

例如

bigserver:solaris:11:PROD
smallerserver:solaris:11:DEV

我只想在 DEV 中打印出 solaris 版本 11 的服务器。使用散列似乎是存储数据的最简单方法,但是,唉,Perl 在尝试仅打印出数据的一部分时会失败。 Dumper 效果很好,但我不想看到所有内容。我哪里出错了??

最佳答案

您有以下内容:

$arrHosts{$strOS}{$strVer}{$strEnv} = $strHostname;

这意味着下面包含一个字符串:

$arrHosts{solaris}{10}{DEV}

您将其视为包含对数组的引用。要按 OS+ver+env 对主机进行分组,请替换

$arrHosts{$strOS}{$strVer}{$strEnv} = $strHostname;

push @{ $arrHosts{$strOS}{$strVer}{$strEnv} }, $strHostname;

遍历 @{ $arrHosts{solaris}{10}{DEV} } 将变得有意义。

关于arrays - 在使用严格引用时不能将字符串用作 ARRAY 引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58546023/

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