Perl hashref sortieren

ghostadmin

Grand Admiral Special
Mitglied seit
11.11.2001
Beiträge
25.210
Renomée
190
Standort
Dahoam Studios
Ich lasse mir mit der Funktion db_show (siehe http://search.cpan.org/~greenbean/Asterisk-AMI/lib/Asterisk/AMI/Common.pm) einen hashref ausgeben.

Der Output davon mit Dumper sieht so aus:

Code:
$VAR1 = {
          '030206469740' => 'spam',
          '09953980407' => 'weinverkauf',
          '03040818430' => '1',
          '02214975466' => 'spam',
        };

Ich kann das z.B. ausgeben mit:
Code:
while ( my ($key, $value) = each(%$blackoutput) ) {
print "$key => $value\n";
}

Das sieht dann so aus:

Code:
030206469740 => spam
09953980407 => weinverkauf
03040818430 => 1
02214975466 => spam

Wie kann ich das ganze in Spalten sortieren nach key oder nach value?
Muss ich das vorher in ein Multi Array packen? Ich habe über Arrays bei Perl gelesen aber das ist für mich sehr komplex und ich komme nicht weiter.

Wenn ich das so mache steht einfach alles hintereinander:
Code:
my @array;
while ( my ($key, $value) = each(%$blackoutput) ) {
push(@array,($key,$value));
}
print @array;

Ausgabe:

Code:
030206469740spam09953980407weinverkauf03040818430102214975466spam
 
Meinst Du das?

Code:
foreach $key (sort (keys(%blackoutput))) {
   print "\t\t$key \t\t$blackoutput{$key}\n";
}
 
da kommen viele Fehler:
Global symbol "$key" requires explicit package name at ./test4.pl line 58.
Global symbol "$key" requires explicit package name at ./test4.pl line 59.
Global symbol "%blackoutput" requires explicit package name at ./test4.pl line 59.
Global symbol "$key" requires explicit package name at ./test4.pl line 59.
Execution of ./test4.pl aborted due to compilation errors.

Es ist auch kein richtiger hash (%blackoutput) sondern nur ein hashref ($blackoutput)
 
Zuletzt bearbeitet:
Das ist ja auch nur eine Idee gewesen und kein fertiges Programm ;)

Deklarationen usw musst Du schon selbst machen auch den hashref in einen hash umwandeln.

Der Kern des Codeschnipsel ist die Sortfunktion im foreach.
 
Du musst das hashref zuerst dereferenzieren und anschließend sollte es mit meiner Methode klappen.
Das findest Du sicher auf Tante Google.
 
so?
my %blackoutputderef = %$blackoutput;

Danach schaffe ich es mit foreach nach key zu sortieren aber nach value geht nicht. Bzw. ich scheitere beim ausgeben vom key

foreach my $value (sort (values( %blackoutputderef))) {
print $value $blackoutputderef{$value}\n";
}
 
Zuletzt bearbeitet:
Das geht!

Jetzt wollte ich gerade schauen wie das geht mit übergeben eines Wertes aus einer HTML Form an Perl im selben File.

Wenn ich jetzt auf den Form button klicke, dann wird es richtig in der Adresszeile angezeigt aber print $inputarg zeigt nichts an.
Rufe ich das Script im Browser mit ?sort=az auf dann wird auch "az" ausgegeben.

Code:
#!/usr/bin/perl

use warnings;
use strict;
use CGI; #for getting values

my $cgi = new CGI; #assign cgi modul to $cgi
my $inputarg = $cgi->param('sort'); #readout arg and store in inputarg

print "Expires: Sunday, 31-Jul-1983 22:44:00 GMT\r\n"; # Don't cache this page, so it can be dynamic
print "Content-Type: text/html\r\n\r\n"; # We're giving the server an HTML page

print "<form name='EntryForm' action='http://$ENV{SERVER_NAME}$ENV{SCRIPT_NAME}?sort=az' method='POST'>";
print "<input type='submit' value='A-Z'>";
print "</form>";

print $inputarg;

Edit: Schon gelöst, dass ?sort=az funktioniert nicht über POST
 
Zuletzt bearbeitet:
Zurück
Oben Unten