Hi,
ich dachte, ich hab hier nur einen kleinen Newbie Fehler bei mir, allerdings hab ich doch etwas "komischeres" entdeckt. Und zwar bekomm ich bei folgendem Code ein sehr komisches Verhalten:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/usr/bin/perl
use strict;
use warnings;
my %test = (
eins => ['Hallo', 'Perl', 'Community'],
zwei => ['Hallo', 'Programmierer']
);
map { print $_ . "\n" for(@{ $test{$_} }) } (keys %test);
print "-" x15;
print "\n";
map {
for(@{ $test{$_} }) {
print $_ . "\n";
}
} (keys %test);
Das ist
fast der selbe Code. Allerdings bekomm ich mit perl -NO=Deparse script.pl folgende Ausgabe:
use warnings;
use strict 'refs';
my(%test) = ('eins', ['Hallo', 'Perl', 'Community'], 'zwei', ['Hallo', 'Programmierer']);
map {foreach $_ (@{$test{$_};}) {
print $_ . "\n";
}} keys %test;
print '-' x 15;
print "\n";
map {foreach $_ (@{$test{$_};}) {
print $_ . "\n";
}} keys %test;
array_hash.pl syntax OK
wie hier zu sehen ist, nimmt er den selben Code intern.
Nun noch die Ausgabe:
Hallo
Perl
Community
---------------
Hallo
Perl
Community
Hallo
Programmierer
Und meine Version ist
ingo perl # perl -v
This is perl, v5.8.4 built for i386-linux-thread-multi
Copyright 1987-2004, Larry Wall
Wie sieht es aus, mit Erklärungen, Reaktionen oder Meinungen?
Danke im Vorraus
Ingo
P.S.: Der Spruch des Tages:
QuoteUser1: Wie war das mit der do while Schleife?
User2: Das ist ja gar keine wirkliche Schleife, oder?
User3: (schreit noch vom Klo) Richtig !
User3: (kommt total aufgeregt und mit heruntergelassener Hose vom Klo) Ja, das sind keine richtige Schleifen. Redo geht beispielsweise nicht damit.
\n\n
<!--EDIT|J-jayz-Z|1126403364-->
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="5065726c2d436f6d6d756e697479"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'
http://perl-tutor.de