2012-07-31 90 views
0

該代碼爲自己說話,沒有使用代碼排序,因爲我不知道您的使用這是Perl中的內容代碼。在/ home/delkav /實驗室的腳本/ grep的Perl哈希和數組+排序

/bash/perl 
%ttys =(); 
my @lsarray = `cat /home/delkav/labs-scripts/grep`; 
my @array; 
$array[0] = <STDIN>; < ONE 
$array[1] = <STDIN>; < TWO 
$array[2] = <STDIN>; < TRHEE 
$array[3] = <STDIN>; < FOUR 
$array[4] = <STDIN>; < FIVE 
$array[5] = <STDIN>; < SIX 
$array[6] = <STDIN>; < SEVEN 
$array[7] = <STDIN>; < EIGHT 
$array[8] = <STDIN>; < NINE 
@ttys{@lsarray} = @array; 
print "@{[%ttys]}\n" 

內容是:

$90850 
$0 
$389 
$469 
$670 
$750 
$684 
$21744 
$604 

打印出來的腳本

$684 
SEVEN 
$469 
FOUR 
$21744 
EIGHT 
$670 
FIVE 
$389 
TRHEE 
$90850 
ONE 
$0 
TWO 
$750 
SIX 
$604 
NINE 

我需要的輸出如何。

$90850 
ONE 
$0 
TWO 
$389 
THREE 
$469 
FOUR 
$670 
FIVE 
$750 
SIX 
$684 
SEVEN 
$21744 
EIGHT 
$604 
NINE 

嗯,謝謝你的幫助。

回答

2

如果您需要保留順序,則不應使用散列,因爲散列函數不會維護順序。相反,你應該使用數組ref。也許是這樣的:

#!/bash/perl 
my @ttys; 
my @lsarray = map { chomp; $_ } `cat /home/delkav/labs-scripts/grep`; 
my @array; 
chomp($array[$_] = <>) for 0..8; 
push @ttys, [$array[$_], $lsarray[$_]] for 0..$#array; 
print "$_->[0]\n$_->[1]\n" foreach @ttys; 
+0

它是完美的,謝謝!非常簡單的你的代碼。 – opmeitle 2012-07-31 16:13:08

0

也許因爲這樣:

print "$_\n$ttys{$_}\n" for @lsarray; 
+0

請注意,在OP代碼中,@lsarray的元素以及%tty的鍵和值都已換行 – ysth 2012-07-31 09:53:31

0

你應該總是use strictuse warnings在每個程序的頂部。你也應該打開這個數據文件並用Perl讀取它,而不是去掉cat

該程序可以滿足您的需求。

use strict; 
use warnings; 

open my $fh, '<', '/home/delkav/labs-scripts/grep' or die $!; 

my @numbers = qw/ ONE TWO THREE FOUR FIVE SIX SEVEN EIGHT NINE TEN /; 

my $i = 0; 
while (<$fh>) { 
    print; 
    print $numbers[$i++], "\n"; 
}