Perl哈希和数组+排序

时间:2012-07-31 06:01:06

标签: perl

代码说明了一点,并没有在代码中使用sort,因为我不知道你使用这是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"
/ home / delkav / labs-scripts / grep中的

内容是:

$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
好的,谢谢你的帮助。

3 个答案:

答案 0 :(得分:2)

如果您需要保留订单,则不应使用散列,因为散列函数不会维护订单。相反,你应该使用数组引用。也许是这样的:

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

答案 1 :(得分:0)

也许就是这样:

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

答案 2 :(得分: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";
}