2012-07-31 2 views
0

이 코드는 Perl의 콘텐츠 코드로 사용되지 않으므로 코드 자체에서 말합니다. 코드에서 정렬을 사용하지 않았습니다./가정/delkav/실험실 - 스크립트/그렙에서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

주문을 유지해야하는 경우 해시 함수가 주문을 유지 관리하지 않기 때문에 해시를 사용하지 않아야합니다. 대신 배열 참조를 사용해야합니다. 어쩌면이 같은이 같은 어쩌면

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

0

:

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

OP 코드에서 @lsarray의 요소와 % tty의 키와 값은 모두 이미 개행 문자를 가지고 있습니다 – ysth

0

당신이해야 항상use strict 모든 프로그램의 상단에 use warnings. 또한 데이터 파일을 열어 cat으로 이동하는 대신 Perl로 읽어야합니다.

이 프로그램은 필요한 것을 처리합니다.

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"; 
}