【问题标题】:How to covert simple (flat) array to multi-dimensional (2D) arrays如何将简单(平面)数组转换为多维(2D)数组
【发布时间】:2014-10-27 22:26:17
【问题描述】:

我有以下 Perl 语言代码:

#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;

my $DF = "/usr/bin/df -Pk"; # HP-UX
my @temp = split /\n/, `$DF`;
shift @temp;
print Dumper \@temp;

输出如下(为了更好的可读性而更短):

$VAR1 = [
          '/dev/vg00/lvol6       114224    46304    67920    41%     /home',
          '/dev/vg00/lvol7       8340704  4336752  4003952   52%     /opt',
          '/dev/vg00/lvol4       520952    35080   485872     7%     /tmp',
        ];

我想将@temp 数组(或创建一个新数组)转换为多维(数组数组),如下所示:

$VAR1 = [
          ['/dev/vg00/lvol6', 114224, 46304, 67920, '41%', '/home'],
          ['/dev/vg00/lvol7', 8340704, 4336752, 4003952, '52%', '/opt'],
          ['/dev/vg00/lvol4', 520952, 35080, 485872, '7%', '/tmp'],
        ];

有人帮忙吗?提前致谢! :)

【问题讨论】:

  • 如果您使用数组进行反引号捕获,则可以跳过换行符的拆分:my @DF = `/usr/bin/df -Pk
  • 也可以替代使用反引号:perlmonks.org/?node_id=177225
  • @TLP:感谢您的信息!但是为了避免这种Can't locate Filesys/DiskSpace.pm in @INCFilesys::Df 模块需要编译我依赖系统df 命令。
  • 据我所知,cpan 工具负责模块的编译和安装。你用过 cpan 工具吗?
  • @TLP:是的,但我无权访问 HP-UX 编译器。 :-/

标签: arrays perl multidimensional-array


【解决方案1】:
@temp = map [ split ], @temp ;

【讨论】:

  • 在@TLP 的建议下工作:@temp = map [ split ], `$DF`
  • 谢谢你,如果你只使用一个简单的表达式,我没有意识到会发生混叠,但如果不使用 map ,那么在这种情况下将毫无意义:D
【解决方案2】:

我会这样做

my @lines = `$DF`;
my @data  = map { [split] } @lines;
print Dumper \@data;

这是假设路径中没有意外的空格

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-22
    • 1970-01-01
    • 2016-02-05
    • 2017-04-04
    • 2011-08-30
    • 2012-02-06
    • 1970-01-01
    相关资源
    最近更新 更多