Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]10506[/thread]

mehrere Fragen u.a. zum topic array²hash

Leser: 1


<< |< 1 2 >| >> 11 Einträge, 2 Seiten
Gast Gast
 2007-10-04 10:51
#100247 #100247
Guten Morgen,

ich habe wieder ein paar Probleme etwas zu realisieren und wollte nun mal fragen, ob das hier vielleicht jemand weiß (bestimmt sogar ;))
Zuerst einmal sorry, dass ich als Gast schreibe, ich bin aufjedenfall RPerl, nur hab ich auf der Arbeit kein Accountzugang.

So nun aber zum eigentlichen Thema:
1. Ich habe ein Array. Es hat fuer 1 Element folgenden Inhalt:

Code: (dl )
a39e432b46dd245ab73ff64fc65b17497ec9ae3d date # <hier kein newline oO>


jetzt muss ich dieses array in einen .. *schluck* hash (assoziatives array) bekommen. Soll so aussehen:

Code: (dl )
date => "a39e432b46dd245ab73ff64fc65b17497ec9ae3d"


Wie macht man sowas? Also $key => date und $value =>"<sha1-hash>"
Und das fuer ein ganezs array. Also jedes Element des arrays muss einen key / value paar ergeben. (Wenn etwas unklar sein sollte, sorry!)

2. Wie kann man hashes sortieren und vergleichen? Sortieren: sort - vergleichen: ???


Vielen lieben Dank

RPerl
renee
 2007-10-04 11:02
#100249 #100249
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
my @array = (
    'a39e432b46dd245ab73ff64fc65b17497ec9ae3d date',
    'a39e432b46dd245ab73ff64fc6asdfijijsdkksdjfks date2',
    'a39e432b46dd245ab73ff64fc6asdfijijsdkksdjfks date3',
);

my %hash = map{ reverse split / /, $_ }@array;

for my $date ( sort keys %hash ){
    print $date,"\n";
}
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Gast Gast
 2007-10-04 12:55
#100251 #100251
Wie immer danke renee, aber echt komisch weshalb ich da nicht draufgekommen bin. ich sollte es wissen ;)
Wenn Du mal in Nuermberg oder Erlangen bist geb ich einen aus :)

Noch eine Frage bzgl. barewords:

Code (perl): (dl )
sysopen(FH, "/$directories[$d]/$files[$i]", 'O_RDONLY');


ich hab mich an sysopen() rangetraut. Klappt auch. Aber mit folgender Warnung:

Code: (dl )
Argument "O_RDONLY" isn't numeric in sysopen at file-check.pl line 33.


Wenn ich es ohne die single quotes schreibe gibts den BAREWORD fehler:

Code: (dl )
Bareword "O_RDONLY" not allowed while "strict subs"  ...


Hab natuerlich strict an.

Gruß,

RPerl
pq
 2007-10-04 13:00
#100252 #100252
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
Gast+2007-10-04 10:55:07--
Wenn ich es ohne die single quotes schreibe gibts den BAREWORD fehler:
Code: (dl )
Bareword "O_RDONLY" not allowed while "strict subs"  ...

du musst diese konstanten importieren:
Code (perl): (dl )
use Fcntl qw(:DEFAULT);
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Gast Gast
 2007-10-04 17:57
#100274 #100274
Ok, klappt. Danke
naechstes extrem mysterioeses Problem:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
sub verify_files{
  my @correct_hashes = ();

  ## abgeguckt von renee :P aetsch!
  open( FILE, '<', "$whitelist" ) or die "Could not open file: $!";
  while ( my $f = <FILE> ) {
    chomp $f;
    push( @correct_hashes, $f );
  }

  close(FILE);

  print $correct_hashes[0];

}


es gibt aus:

Code: (dl )
1
2
foo2
foo2


Aber ich will doch pro Zeile 1 Element. ich versteh die Welt nicht mehr ...
Also im Element 0: foo2
Im Element 1: foo2

ich verstehs nicht.
Gast Gast
 2007-10-04 18:09
#100275 #100275
Problem gefunden:
In einer Funktion setze ich local $/ = undef;
In der anderen kommts deswegen zu Problemen. Aber ich hab doch local benutzt. Ist der Gueltigkeitsbereich dann noch in der anderen Funktion?
renee
 2007-10-04 18:33
#100278 #100278
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Zeig mal mehr Code...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Strat
 2007-10-05 01:21
#100299 #100299
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
Gast+2007-10-04 15:57:46--
Code (perl): (dl )
1
2
3
4
5
6
7
8
  ## abgeguckt von renee :P aetsch!
  open( FILE, '<', "$whitelist" ) or die "Could not open file: $!";
  while ( my $f = <FILE> ) {
    chomp $f;
    push( @correct_hashes, $f );
  }

  close(FILE);



Wenn du sowieso den gesammten Dateiinhalt in einem Array brauchst, dann wuerde ich folgendermaszen schreiben:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
sub verify_files {
    my( $whitelist ) = @_;

    open( my $FILE, '<', $whitelist ) or die "Could not open file '$whitelist': $!";
    chomp( my @correct_hashes = <$FILE> );
    close $FILE;

  ...
}

oder so aehnlich.

Quote
sysopen(FH, "/$directories[$d]/$files[$i]", 'O_RDONLY');

O_RDONLY ist eine Konstante aus use Fcntl qw(:DEFAULT); (schrieb ja pq schon), und darf nicht als String 'O_RDONLY' verwendet werden, sondern ohne Anfuehrungszeichen.
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Strat
 2007-10-05 01:24
#100300 #100300
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
Gast+2007-10-04 16:09:48--
Aber ich hab doch local benutzt. Ist der Gueltigkeitsbereich dann noch in der anderen Funktion?


Bei local ist der Nebeneffekt, dass das eine globale Variable "ueberdeckt"; wenn also aus der Scope, in dem local $/ = undef; steht, weitere Subs aufgerufen werden, erben die diesen undef-Wert. Also den Scope von local immer so klein wie moeglich halten, z.B.

Code (perl): (dl )
1
2
3
4
5
6
my $fileContent = do {
    open( my $FH, '<', $filename )
        or die "Error: couldn't read file '$filename': $!\n";
    local $/; # slurp mode
    <$FH>;
}; # do
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Gast Gast
 2007-10-05 10:23
#100314 #100314
Ok, vielen Dank Strat! Super Erklaerung!
Hab das nun so gemacht:

Code: (dl )
$/ = "\n";


Das haut hin, ist das dann in Ordnung? Script funktioniert damit bestens :)

Gruß

RPerl
<< |< 1 2 >| >> 11 Einträge, 2 Seiten



View all threads created 2007-10-04 10:51.