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

Hashslice aus Hashref ?



<< |< 1 2 >| >> 15 Einträge, 2 Seiten
KurtZ
 2008-04-17 20:39
#108512 #108512
User since
2007-12-13
411 Artikel
BenutzerIn
[default_avatar]
mal wieder ne stilistische Frage, kann man mit Pfeilnotation einen Hashslice aus einem Hashref gewinnen? Ich bekomme es nur mit der @-Notation hin.

perl -e '
Code (perl): (dl )
1
2
3
$hr={a=>1,b=>2,c=>3};
print "geht: ",@$hr{a,c};
print "geht nicht:",$hr->{a,c};
'
TMTOWTDYOG (there's more than one way to dig your own grave)
sid burn
 2008-04-17 21:20
#108513 #108513
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
Code: (dl )
1
2
my $hr={a=>1,b=>2,c=>3};
printf "geht: %d und %d \n", @{$hr}{qw/a c/};
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
betterworld
 2008-04-18 16:33
#108533 #108533
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
KurtZ+2008-04-17 18:39:36--
Code (perl): (dl )
1
2
3
$hr={a=>1,b=>2,c=>3};
print "geht: ",@$hr{a,c};
print "geht nicht:",$hr->{a,c};

Uiuiui, das sind doch nicht etwa Barewords, die Du da benutzt? Also a,c meine ich.
moritz
 2008-04-18 16:38
#108534 #108534
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
Wieso denn barewords? Auf der linken Seite des "Fat Commas" => werden strings automatisch gequotet. Sehr hilfreich für hashes, und auch unter "use strict;" erlaubt.
betterworld
 2008-04-18 16:50
#108535 #108535
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
moritz+2008-04-18 14:38:50--
Wieso denn barewords? Auf der linken Seite des "Fat Commas" => werden strings automatisch gequotet. Sehr hilfreich für hashes, und auch unter "use strict;" erlaubt.

Ja, aber guck in dem Code-Schnipsel mal in die zweite und dritte Zeile, da sind keine Fat Commas.
KurtZ
 2008-04-18 16:53
#108536 #108536
User since
2007-12-13
411 Artikel
BenutzerIn
[default_avatar]
moritz+2008-04-18 14:38:50--
Wieso denn barewords? Auf der linken Seite des "Fat Commas" => werden strings automatisch gequotet. Sehr hilfreich für hashes, und auch unter "use strict;" erlaubt.


hmm ... mit Ausnahmen:
Code (perl): (dl )
1
2
$hr={a1=>1,b=>2,v1=>3};
print "geht: ",@$hr{a1,v1}; # geht: 1


aber mir gehts ums dereferenzieren und nicht ums quoting (in meinem Code stehen da auch Arrays).

Conway propagiert dass man immer mit -> dereferenzieren solle, bei Hashslices will mir das aber nicht gelingen.
TMTOWTDYOG (there's more than one way to dig your own grave)
renee
 2008-04-18 17:16
#108538 #108538
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
KurtZ+2008-04-18 14:53:21--
hmm ... mit Ausnahmen:
Code (perl): (dl )
1
2
$hr={a1=>1,b=>2,v1=>3};
print "geht: ",@$hr{a1,v1}; # geht: 1


Das hat damit zu tun, das "v1" ein besonderer String ist: Das ist ein "v-String", der intern als "\001" angesehen wird...

Schau Dir mal CPAN:Perl::Version zum Thema v-strings an...

Dein Test habe ich mal als "test.pl" gespeichert und B::Concise gibt folgende Ausgabe (Ausschnitt):
Quote
C:\>perl -MO=Concise test.pl
[...]
i <$> const[PV "a1"] s/BARE ->j
j <$> const[PVMG "\001"] s ->k
[...]
test.pl syntax OK


Edit: Mehr zu v-string findet man auch in perldata
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/
renee
 2008-04-18 17:17
#108539 #108539
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
betterworld+2008-04-18 15:16:26--
KurtZ+2008-04-18 14:53:21--
Conway propagiert dass man immer mit -> dereferenzieren solle, bei Hashslices will mir das aber nicht gelingen.

-> ist ja auch schoener. Aber bei Hashslices habe ich es auch nie hingekriegt.


Noch geht das nicht. Gerade diese Woche wurde bei den Perl5Porters ein Patch eingereicht, der vermutlich in Perl 5.12 mit drin ist, der genau das erlauben wird...
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/
betterworld
 2008-04-18 17:16
#108540 #108540
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
KurtZ+2008-04-18 14:53:21--
Conway propagiert dass man immer mit -> dereferenzieren solle, bei Hashslices will mir das aber nicht gelingen.

-> ist ja auch schoener. Aber bei Hashslices habe ich es auch nie hingekriegt. Aber immerhin kommt man in komplizierteren Strukturen immerhin mit -> bis zum betreffenden Hash hin:
Code (perl): (dl )
@{$foo->{bar}->{baz}}{'a', 'b'}

Wobei man das zweite -> auch weglassen koennte.
KurtZ
 2008-04-18 18:16
#108541 #108541
User since
2007-12-13
411 Artikel
BenutzerIn
[default_avatar]
renee+2008-04-18 15:16:23--
Das hat damit zu tun, das "v1" ein besonderer String ist: Das ist ein "v-String", der intern als "\001" angesehen wird...


ich weiß :-) Aber willst du damit sagen man könne deswegen auf quoting verzichten, solange kein v... vorkommt?
TMTOWTDYOG (there's more than one way to dig your own grave)
<< |< 1 2 >| >> 15 Einträge, 2 Seiten



View all threads created 2008-04-17 20:39.