1. Count
#!/usr/bin/perl -w
##############################
#Goal: count array elements
##############################
use strict;
my @arr1 = (1,2,3,3,4,2,3);
my %hash1;
$hash1{$_}++ for @arr1;
print "$_\t$hash1{$_}\n" for keys %hash1;
my @arr2 = (23,5,9,109.29,23,23,9);
my %hash2;
map {!$hash2{$_}?$hash2{$_} = 1:$hash2{$_}++} @arr2;
print $_."\t".$hash2{$_}."\n" for keys %hash2;
Output:
4 1
1 1
3 3
2 2
109.29 1
9 2
23 3
5 1
2. Sort
#!/usr/bin/perl
##############################
#Goal: sort array elements
##############################
use strict;
my @arr = qw/int0 int1 int2 int3 int34 int5 int6 int7 int8 int69 int10 int10 int12 int13 int14 int15 int16 int17 int18 int19 int20/;
print '<=>: ', join( ' ', sort { $a <=> $b } @arr ), "\n"; # string comparison;
print 'cmp: ', join( ' ', sort { $a cmp $b } @arr ), $/; # Numeric comparison;
my @sorted = map { "int$_" } 0..5, 17..20;
print "@sorted", $/; # $/="\n";
my @new = map {$_->[1]} sort {$a->[0] <=> $b->[0]} map {/(\d+)/; [$1, $_]} @arr;
print "@new", $/;
Output:
<=>: int0 int1 int2 int3 int34 int5 int6 int7 int8 int69 int10 int10 int12 int13 int14 int15 int16 int17 int18 int19 int20
cmp: int0 int1 int10 int10 int12 int13 int14 int15 int16 int17 int18 int19 int2 int20 int3 int34 int5 int6 int69 int7 int8
int0 int1 int2 int3 int4 int5 int17 int18 int19 int20
int0 int1 int2 int3 int5 int6 int7 int8 int10 int10 int12 int13 int14 int15 int16 int17 int18 int19 int20 int34 int69
3. Sort
#!/usr/bin/perl -w
###################################
#Goal:1.first column increasing
# 2.fifth column decrseasing
# 3.second column decrseasing
###################################
use strict;
my @a = <DATA>;
my @newa = map {$_->[-1]} sort {$a->[0] <=> $b->[0] || $b->[1] <=> $a->[1] || $b->[2] <=> $a->[2]} map {[(split)[0,4,1], $_]} @a;
# "$_" at the end thus "$_->[-1]";
for (@newa) {
print "$_";
}
__DATA__
200809 74889999 3.0 6.6 188
200810 74885444 4.0 1.0 200
200810 74885555 0.8 5.5 120
200810 74889888 4.0 1.0 200
Output:
200809 74889999 3.0 6.6 188
200810 74889888 4.0 1.0 200
200810 74885444 4.0 1.0 200
200810 74885555 0.8 5.5 120
4. Sort
#!/usr/bin/perl
##############################
#Goal:sort by column 3
##############################
use strict;
my @by_uid = map {$_->[0]} sort {$a->[1] <=> $b->[1]} map {[$_, (split /:/)[2]]} <DATA>;
# "$_" at the beginning thus "$_->[0]";
for (@by_uid) {
print ."\n";
}
__DATA__
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
Output:
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync