Danke für Deine Antwort nur bin ich jetzt immer noch genau so schlau wie vorhin. Was ist den am Code nicht gut? Es muss lediglich seinen Zweck erfüllen mehr nicht.
So sähe es in nach deinem Beispiel aus:
#!/usr/bin/perl -w
use strict;
my @sortlines = map {$_}
sort{ $a->[0] .$a->[1] .$a->[2] cmp $b->[0] . $b->[1] . $b->[2] }
map {[split(/\|/, $_)] } <DATA>;
use Data::Dumper;
print Dumper \@sortlines;
__DATA__
Microsoft|Office 2000|7.0|Vollversion|
Microsoft|Office 95|6.0|Vollversion|
Microsoft|Windows NT|4.0|Vollversion|
Microsoft|Windows 2000|5.0|Vollversion|
Microsoft|Windows XP|5.1|Vollversion|
Adobe|Photoshop 7|7.0|Vollversion|
Adobe|Photoshop CS|8.0|Vollversion|
Struppi.