2014-09-03 96 views
3

我在Perl語言以下代碼:如何隱蔽簡單(平)陣列到多二維(2D)陣列

#!/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'], 
     ]; 

任何幫助?提前致謝! :)

+3

如果你使用一個數組可以跳過換行符分割對於反向捕獲:'my @DF = \'/ usr/bin/df -Pk' – TLP 2014-09-03 12:22:32

+3

也可以使用反引號替代:http://www.perlmonks.org/?node_id=177225 – TLP 2014-09-03 12:27:36

+0

@TLP:謝謝信息!但爲了避免這樣的問題'不能在@ INC中找到Filesys/DiskSpace.pm,並且'Filesys :: Df'模塊需要編譯,我依靠系統'df'命令。 – Scottie 2014-09-03 13:09:29

回答

7
@temp = map [ split ], @temp ; 
+1

在@ TLP的建議下工作:'@temp = map [split],''DF \'' – RobEarl 2014-09-03 12:27:00

+0

感謝你們,如果你只是使用簡單的表達式,在這種情況下,如果沒有:D – 2014-09-03 12:40:23

1

這是我會怎麼做

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

這是假設存在一個路徑沒有意外的空白