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

Werte in Hashes: Problem bei Werten mit v am Anfang



<< >> 8 entries, 1 page
GwenDragon
 2005-11-13 16:53
#60086 #60086
User since
2005-01-17
14483 articles
Admin1
[Homepage]
user image
Ich bin gestern über folgendes Konstrukt gefallen.
Ich komme mir schon doof vor.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
use strict;

my %vars = (
   v1 => 9.81221,
   v2 => 3.13221,
   v7 => -1,
   h3 => 'a',
   x2 => 'ÄÄÄÄ'
);

print $_ for (sort keys %vars);


Problem mit Perl 5.006001 (ActivePerl 5.6.1):
Aus welchem Grund werden die Hashkeys mit v am Anfang als Binäre werte anstatt Zeichenketten eingesetzt.

Perl 5.005 schreibt v1 v2 v7
Perl 5.6.1 schreibt SOH STX BEL
Perl 5.8.6 schreibt  v1 v2 v7

Bin ich jetzt völlig Gaga?\n\n

<!--EDIT|GwenDragon|1131893716-->
die Drachin, Gwendolyn


Unterschiedliche Perl-Versionen auf Windows (fast wie perlbrew) • Meine Perl-Artikel

Ronnie
 2005-11-13 17:12
#60087 #60087
User since
2003-08-14
2022 articles
BenutzerIn
[default_avatar]
Schau mal hier: http://perldoc.perl.org/perldata.html#Version-Strings
Gab immer mal wieder Probleme mit v-strings.
GwenDragon
 2005-11-13 17:18
#60088 #60088
User since
2005-01-17
14483 articles
Admin1
[Homepage]
user image
@Ronnie

Vielfachen drachlichen Dank.

Ich konnte mich nämlich nicht mehr genau entsinnen, was das war.

Quote
A literal of the form v1.20.300.4000 is parsed as a string composed of characters with the specified ordinals. This provides an alternative, more readable way to construct strings, rather than use the somewhat less readable interpolation form "\x{1}\x{14}\x{12c}\x{fa0}".
This is useful for representing Unicode strings, and for comparing version ``numbers'' using the string comparison operators, cmp, gt, lt etc. If there are two or more dots in the literal, the leading v may be omitted.

   print v9786;              # prints UTF-8 encoded SMILEY, "\x{263a}"
   print v102.111.111;       # prints "foo"
   print 102.111.111;        # same
in perldata von 5.6.1
Ja, in perdata steht es. Aber useful!?? Nein.

Kein Wunder dass bei 5.8 steht:
Quote
The marginal benefits of v-strings were greatly outweighed by the potential for Surprise and Confusion.


Quote
Note that since Perl 5.8.1 the single-number v-strings (like v65 ) are not v-strings before the => operator (which is usually used to separate a hash key from a hash value), instead they are interpreted as literal strings ('v65').

Das hatte ich aber erwartet.

Kein Wunder, dass ich darüber fiel. Noch keine v-strings benutzt.

Also besser solche Keys in einfache Anführungszeichen.

Böse Falle.\n\n

<!--EDIT|GwenDragon|1131897860-->
die Drachin, Gwendolyn


Unterschiedliche Perl-Versionen auf Windows (fast wie perlbrew) • Meine Perl-Artikel

GwenDragon
 2005-11-13 17:50
#60089 #60089
User since
2005-01-17
14483 articles
Admin1
[Homepage]
user image
So. Damit nicht noch andere darüber purzeln, existiert jetzt im Wiki in der FAQ unter Hashes ein Eintrag.
http://wiki.perl-community.de/bin/view/Wissensbasis/HashVWerte

//Edit: Link korrigiert\n\n

<!--EDIT|GwenDragon|1131897785-->
die Drachin, Gwendolyn


Unterschiedliche Perl-Versionen auf Windows (fast wie perlbrew) • Meine Perl-Artikel

pq
 2005-11-13 18:34
#60090 #60090
User since
2003-08-04
12207 articles
Admin1
[Homepage]
user image
gwendragon: hat aber nicht wirklich was mit hashes zu tun. eher mit strings an sich.
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
ptk
 2005-11-13 22:11
#60091 #60091
User since
2003-11-28
3645 articles
ModeratorIn
[default_avatar]
Aber bei Hashes schlägt diese Besonderheit wegen des Autoquotings der Schlüssel zu. Ein anderer Kandidat für Überraschungen sind Konstanten an der gleichen Stelle.
betterworld
 2005-11-14 01:02
#60092 #60092
User since
2003-08-21
2613 articles
ModeratorIn

user image
[quote=ptk,13.11.2005, 21:11]Aber bei Hashes schlägt diese Besonderheit wegen des Autoquotings der Schlüssel zu. Ein anderer Kandidat für Überraschungen sind Konstanten an der gleichen Stelle.[/quote]
Es liegt wohl hauptsaechlich an dem "fat comma", welches man auch ausserhalb von Hashes benutzen darf.
GwenDragon
 2005-11-14 15:02
#60093 #60093
User since
2005-01-17
14483 articles
Admin1
[Homepage]
user image
Ist es jetzt nun für Anfänger nützlich? Oder nicht?

[quote=pq,13.11.2005, 17:34]gwendragon: hat aber nicht wirklich was mit hashes zu tun. eher mit strings an sich.[/quote]
Soll ich es jetzt verschieben? Wohin denn.\n\n

<!--EDIT|GwenDragon|1131974166-->
die Drachin, Gwendolyn


Unterschiedliche Perl-Versionen auf Windows (fast wie perlbrew) • Meine Perl-Artikel

<< >> 8 entries, 1 page



View all threads created 2005-11-13 16:53.