gpt4 book ai didi

arrays - perl丢弃映射操作中的第一个数组元素

转载 作者:行者123 更新时间:2023-12-04 02:23:30 26 4
gpt4 key购买 nike

我开始利用 perl map 的强大功能,但遇到了一个我找不到答案的问题。基本上我正在解析一个 unix 命令的返回,它有一个我不需要的标题行,然后每个项目有 2 行信息。目前,我正在这样做:

(undef, @ret) = map { [split /\n/] } split(/(?:Host: )/, `cat /proc/scsi/scsi`);

跳过标题并为每个“有用”文本行提供一个数组元素会很好。但是,我想改为构建一个散列,除了那条额外的行外,我知道该怎么做。那么我如何才能在一行代码中忽略第一个数组元素,以允许我创建散列?我在考虑切片或拼接的某个地方,但我需要知道由主机上的拆分创建的数组的大小(这可能吗?)。我想我也可以做一个 (undef,undef, %ret) = map {...} 但如果这可以用切片或拼接来完成,那将是很好的学习方法。

最佳答案

split 中删除第一个元素的一种方法并且仍然能够链接更多命令将使用 grep带有状态变量:

use strict;
use warnings;

my @lines = do {
my $line = 0;
grep {++$line > 1} split /\n/, "1\n2\n3\n4\n5\n6\n7\n"
};

print "@lines";

输出:

2 3 4 5 6 7

但是,我认为您试图在一行代码中做太多事情。

既然您只是在读取一个文件,我建议您使用 Perl 来 open文件而不是炮击到 cat

假设您的键/值分隔符是冒号,以下是我建议您构建逻辑的方式:

use strict;
use warnings;
use autodie;

my %hash = do {
open my $fh, '<', '/proc/scsi/scsi';
<$fh>; # Skip Header Row
map {chomp; split /:/, $_, 2} <$fh>
};

关于arrays - perl丢弃映射操作中的第一个数组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25270236/

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