Schrift
[thread]7267[/thread]

Perlbug: Live vom Perl Community Treffen !



<< >> 9 Einträge, 1 Seite
J-jayz-Z
 2005-09-11 04:00
#57818 #57818
User since
2005-04-13
625 Artikel
BenutzerIn
[Homepage] [default_avatar]
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:
Code: (dl )
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:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
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:
Code: (dl )
1
2
3
4
5
6
7
8
9
Hallo
Perl
Community
---------------
Hallo
Perl
Community
Hallo
Programmierer

Und meine Version ist
Code: (dl )
1
2
3
4
5
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:
Quote
User1: 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
sri
 2005-09-11 05:34
#57819 #57819
User since
2004-01-29
828 Artikel
BenutzerIn
[Homepage] [default_avatar]
Deparse hat viele bugs, einige benutze ich regelmaessig fuer oneliner. ;)
Crian
 2005-09-12 13:39
#57820 #57820
User since
2003-08-04
5871 Artikel
ModeratorIn
[Homepage]
user image
Der Spruch des Tages ... hat der eine reale Basis vom letzten Wochenende? :D
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
J-jayz-Z
 2005-09-12 21:32
#57821 #57821
User since
2005-04-13
625 Artikel
BenutzerIn
[Homepage] [default_avatar]
@Crian: Ja, da kam so jemand aus dem Klo, der recht gerne zu Tage gibt, das er gut infomiert ist und wollte an dem Gespräch teilnehmen.
okay, das Quiz des Tages: Wer zuerst die Teilnehmer des Dialogs raus hat, dem trete ich beim nächsten Treffen (falls ich einen bekomm) meinen Platz bei Strat ab :p
Ausgenommen natürlich die, die davon wissen ^^

EDIT : War ein Scherz, den Platz würde ich nicht hergeben *gg*\n\n

<!--EDIT|J-jayz-Z|1126546402-->
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
esskar
 2005-09-13 02:23
#57822 #57822
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
liegt wohl an der verschachtelten benutzung von $_
J-jayz-Z
 2005-09-13 10:09
#57823 #57823
User since
2005-04-13
625 Artikel
BenutzerIn
[Homepage] [default_avatar]
Jo, daran liegt es wohl, sollte aber nicht daran liegen...
Und egal was man noch innerhalb von map { } einträgt, damm geht es. Und das sollte nichts an $_ ändern...
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
Strat
 2005-09-13 15:15
#57824 #57824
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
was ich nicht verstehe:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
use strict;
use warnings;
use Data::Dumper;

my %test = (
              eins => ['Hallo', 'Perl', 'Community'],
              zwei => ['Hallo', 'Programmierer']
      );
map { print $_ . "\n" for(@{ $test{$_} }) } (keys %test);
print Dumper(\%test);
^D
Hallo
Perl
Community
$VAR1 = {
         '' => [],
         'eins' => [
                     'Hallo',
                     'Perl',
                     'Community'
                   ],
         'zwei' => [
                     'Hallo',
                     'Programmierer'
                   ]
       };


so wie ich perl verstehe, wird sowohl bei der for-schleife (egal, ob vor oder nachgestellt) als auch bei map $_ automatisch mit einem local versehen, also duerften sich die beiden $_ nicht ins gehege kommen.

Da auch nirgendwo ein $_ veraendert wird, duerfte sich auch %hash nicht veraendern. von woher kommt $hash{''} = [] ? (habe es auch anders validiert, nicht nur via Data::Dumper, aber das ist am kuerzesten). Das verstehe ich nicht.

ich denke, das waere mal ein fall fuer einen debugger bzw sogar eine debug-version von perl... hat da jemand zeit&lust? ich muesste mich da erst wieder einarbeiten...


aber momentan tendiere ich schon ganz schoen in richtung bug.\n\n

<!--EDIT|Strat|1126610206-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
[E|B]
 2005-09-13 23:45
#57825 #57825
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Evtl. mal einen Post unter bugs.perl.org absetzen?
Gruß, Erik!

s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}

It's not a bug, it's a feature! - [CGI-World.de]
pq
 2005-09-14 00:01
#57826 #57826
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
oder mal bleadperl installieren und gucken, ob der bug noch da ist.\n\n

<!--EDIT|pq|1126641734-->
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
<< >> 9 Einträge, 1 Seite



View all threads created 2005-09-11 04:00.