Leser: 18
1 2 3 4 5 6 7 8 9 10 11
#!/usr/bin/perl use strict; use warnings; use diagnostics; my $datum = '21.01.2010'; my %konfig = ( default_vertragsbeg => sprintf '01.%02u.%04u',(split /\./,$datum)[1..2], foo => 'test', bar => 'test2', ); foreach (keys %konfig) { print "$_ => $konfig{$_}\n" }
2010-01-21T09:25:20 pqGegenfrage: woher soll perl wissen, dass nach dem split die Parameterliste für sprintf zu Ende sein soll? Ich denke, damit erklärt es sich ganz gut.
1 2 3 4 5 6
my $default = sprintf '01.%02u.%04u',(split /\./,$datum)[1..2], foo => 'test', bar => 'test2'; my %konfig = ( default_vertragsbeg => $default, );
1
2
3
4
5
6
7
perl -MO=Deparse -e 'my %konfig = (
default_vertragsbeg=> sprintf "01.%02u.%04u",(split /\./,$datum)[1..2],
foo => "test",
bar => "test2",
);'
my(%konfig) = ('default_vertragsbeg', sprintf('01.%02u.%04u', (split(/\./, $datum, 0))[1, 2], 'foo', 'test', 'bar', 'test2'));
2010-01-21T09:26:00 reneeNatürlich ist das richtig. Woher sollte Perl wissen, was Du meinst? Perl ist schon ziemlich gut im "raten" was man meint, kann aber auch nicht alles wissen. sprintf nimmt nun mal eine *Liste* als Parameter. Woher soll es wissen, wann die Parameterliste beendet ist...
QuoteDas heißt, die beiden unteren Zuweisungen werden als Teil der Liste für sprintf interpretiert?
QuoteHmmmmmmmmmmmm, dann ist => garnicht fest als Syntax für eine Zuweisung im Hash reserviert?
QuoteGibt es denn stattdessen ein Zeichen, damit solche "Flüchtigkeitsfehler" nicht passieren können?
2010-01-21T09:33:55 sid burnQuoteGibt es denn stattdessen ein Zeichen, damit solche "Flüchtigkeitsfehler" nicht passieren können?
Klammern bei Funktionen () bei Hash zuweisungen angewöhnen.
1 2 3 4 5 6 7 8 9 10
my %hash = ( key => test(), value => 1, ); # ganz viel Code oder die Sub ist sogar in einem anderen Modul sub test { return; }
2010-01-21T09:52:45 sid burnBei eigenen Funktionen weiß ich das.Man sollte schon Wissen ob die Funktionen die man aufruft unterschiedliche Sachen im Listen oder Skalarkontext zurück geben.
2010-01-21T09:52:45 sid burnGegenfrage: Weißt Du bei *jeder* Funktion, die Du einsetzt, wie diese z.B. auf falsche Parameter reagiert? Schaust Du Dir wirklich immer den Sourcecode von Funktionen an? Ich nicht.Oder Programmierst du immer mit Funktionen wo du nicht weißt was diese tun?
QuoteGegenfrage: Weißt Du bei *jeder* Funktion, die Du einsetzt, wie diese z.B. auf falsche Parameter reagiert? Schaust Du Dir wirklich immer den Sourcecode von Funktionen an? Ich nicht.
QuoteNaja, dass die Hash-Deklaration einen Listenkontext erzwingt, ist wohl nicht allen bekannt. Es ist auch nicht immer ganz einfach...Und wann nunmal Skalar und Listenkontext greift sollte man als Perl-Programmierer Wissen.
2010-01-21T09:29:23 biancaDas heißt, die beiden unteren Zuweisungen werden als Teil der Liste für sprintf interpretiert?
2010-01-21T09:29:23 biancaNein. sid burn hat es schon gesagt, dass es das sogenannte "fat comma" ist. Das hat nur zur Folge, dass der Teil links von "=>" nicht als String geschrieben werden muss.Hmmmmmmmmmmmm, dann ist => garnicht fest als Syntax für eine Zuweisung im Hash reserviert?
2010-01-21T09:29:23 biancaJa, die runden Klammern beim sprintf-Aufruf ;-) Im Ernst: Nein, es gibt kein spezielles Zeichen. Ich mache so etwas in der Regel so, dass ich Funktionsaufrufe aus Hash-Definitionen rausziehe.Gibt es denn stattdessen ein Zeichen, damit solche "Flüchtigkeitsfehler" nicht passieren können?